home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.update.uu.se
/
ftp.update.uu.se.2014.03.zip
/
ftp.update.uu.se
/
pub
/
pdp8
/
os278-src.tar.Z
/
os278-src.tar
/
set.pa
< prev
next >
Wrap
Text File
|
1992-09-18
|
79KB
|
4,105 lines
/SET.PA OS278
/FROM:
//11 OS8 SET (PAL8/MACREL VERSION)
/
/S.R.
/
/
/ S E T
/
/
/
/
/
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
/AND SHOULD NOT BE CONSTRUED 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) 1977,1978,1981,1982 BY DIGITAL EQUIPMENT CORPORATION.
/
/
/
/
//SAVE STRING FOR V4:
/0-777,1400-7577,12000-16377,30000-33577=2100
/START IS AT 200
/ EDIT HISTORY:
/ 19-MAR-77 REMOVED FROM CAMP V4
/ 19-MAR-77 FIXED BUG WITH SET MTA FILES
/ 19-MAR-77 FIXED BUG WITH SET CDR
/ 19-MAR-77 FIXED BUG WITH = OPTION
/ 19-MAR-77 CONVERTED TO MACREL CODE
/ 01-APR-77 TTY PAUSE
/ 01-APR-77 TTY HEIGHT
/ 01-APR-77 TTY SCOPE
/ 17-APR-77 REWROTE TTY PAGE
/ 17-APR-77 DEV: DVCODE
/ 17-APR-77 FINISHED TTY SCOPE
/ 27-APR-77 TTY COL
/ 27-APR-77 SYS OPTIONS (INIT, OS8, OS78)
/ 03-MAY-77 LA8A, LA78
/ 03-MAY-77 INIT OS78 FIXES TERMINATE
/ 03-MAY-77 BASIC FIXES
/ 29-JUN-77 TTY ARROW (NOT FOR PS/8)
/ 29-JUN-77 TTY ESC (NOT FOR PS/8)
/ 29-JUN-77 DEV BLK LOC (NOT FOR PS/8)
/ 08-DEC-77 ADDED SYMBIONT SUPPORT
/ 23-MAY-78 FIXED SCOPE BUG AND 2-PAGE SYS HANDLER BUG
/ 08-JUN-78 FIXED WIDTH=N BUG
/ 01-FEB-79 COMMENTED THE PROGRAM
/ 09-JAN-81 ADDED SYS VT278 OPTION
/ 13-JAN-81 ADDED CODE TO ALLOW SET SYS DEVICE OPTION
/ 15-APR-81 CHANGED "SET TTY XXX" TO SUPPORT NEW VERSION ONLY
/VB0 OS278 CHANGES
/ 05-AUG-82 FIXED SET SYS DEVICE TO INCLUDE 1 ADDITIONAL
/ DIRECTORY SEGMENT
/ 05-AUG-82 ADDED TEXT FOR RX50 HANDLERS
/VB1
/ 15-OCT-82 CHANGED VERSION CHECK FOR CCL
/ 16-NOV-82 CHANGED ODT PATCH TABLE TO REFLECT CHANGES
/ 19-NOV-82 CHANGED SET SYS VT278 TO OS278
/ CHANGED BATCH DEFAULTS TO ZERO, DON'T BOOT
/ 29-NOV-82 REMOVED CODE FOR RX28,RX78 CHECK
/ REMOVED TEXT FOR RX28 AND VXA0
/ ALLOW SET LPT WIDTH TO WORK ON LPTS HANDLER
/ REMOVED BRACE AND BRACKET CHECKS FOR ALTMODE
/ 27-DEC-82 ADDED TEXT FOR COMM HANDLER
/ 04-JAN-83 CHANGED KBMTBL,CDTBL TO REFLECT CHANGES TO
/ SYSTEM FOR LC CHAR SUPPORT
/ CHANGED SET SYS DEVICE QUESTIONS FOR UC OR LC
/VB2 13-JAN-84 Version change to match CCL.SV
/ 16-JAN-84 Removed call to FIXCCL termin has been removed
/ from CCL.
/VB3 19-JAN-84 Change version to match CCL
//FOR OS78 V4 RELEASE:
VOS278=4 //RECOGNIZES SET SYS OS278
VERSION="B&77^100+63 //VERSION IS "B3"
/ MUST SKIP LOCS 1000-1777
/FIELD 0 BUFFERS:
LINBUF=1000
AUXBUF=6600
HNDLBF=7200
/0000-0777 /SET
/1000-1377 /OS/8 LINE BUFFER
/1400-1777 /PS/8 LINE BUFFER **SHARED BY "SET SYS OS8; OS78; OS278" **
/2000-6577 /SET
/6600-7177 /AUXILIARY I/O BUFFER **SHARED BY "SET HANDLER"**
/7000-7177 /I/O BUFFER FOR TECO CCB **SHARED BY SOME "ERROR MESSAGES"
/7200-7577 /OS/8 HANDLER
/7600-7777 /OS/8
//MONITOR CROSS REFERENCES:
MONIT= 7600
MONIT5=7605
SHNDLR=7607
SCPBIT=7726 /BIT 4
IFDEF EDF <MACREL=1>
IFNDEF EDF <MACREL=0>
IFNZRO MACREL < .ASECT AAA
>
IFZERO MACREL < *0 >
0
CIF 30
JMP .-1
IFNZRO MACREL < .XSECT XSET
>
IFZERO MACREL < *10 >
XR1, 0
XR2, 0
XR3, 0
IFNZRO MACREL < .ZSECT ZSET
>
IFZERO MACREL < *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
PTR, 0
DHIT, 0 /DEVICE HANDLER INFO TABLE - 1
DHI, 0 /DEVICE HANDLER INFO
DBLK, 0 /DEVICE HANDLER BLOCK
VNOPTR, 0 /PTS TO VERSION # IN HANDLER
VNO, 0 /CURRENT HANDLER VERSION NUMBER
SAVPTR, 0
NO, 0 /1 MEANS 'NO'
FLG, 1 /1 MEANS SAW NO DIGITS
RR, 0
NUCODE, 0
SCOP, 0 /NON-0 IF TTY IS SCOPE
NUM2, 0
SYSSWT, 0 /1=OS8 SYS; 2=OS78 SYS; 3=OS278 SYS
TBLPTR, 0 /POINTER TO TABLE OF CHANGES FOR SET SYS OS78
IFNZRO MACREL < .ASECT ASET
>
*200
START, SKP
JMP CHN
TAD ["#
JMS I [TYPE
JMS BIT
JMS I [READ /READ A LINE INTO OS/8 LINE BUFFER
CHN, TAD [LINBUF /CHAIN ENTRY ADDRESS
DCA LINPTR /INITIALIZE POINTER TO LINE BUFFER
JMS BIT
STA
JMS I [SPACE /IGNORE LEADING SPACES
SEHAN, 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
-2305;SET /SE
-2605;SVERSION /VE
-1005;HELPMS /HE
-1405;DRIVER /___ ____LER XXXX XXXX
/DRIVER ACCESSED FOR SET HANDLER INPUT
/WITH POINTER AT ...LER
0
SNA CLA
JMP I (BADINP /INSUFFICIENT INPUT
JMP I [SYNTAX /NONE OF THESE
BIT, 0
CDF 10
TAD I (SCPBIT
CDF 0
AND [200
DCA SCOP /NOTE WHETHER TTY IS SCOPE V3D
TAD I (7612
TAD (-3
SNA CLA
JMS I (FIX2P /FIXUP 2-PAGE SYSTEM HANDLER
DCA .-1 /ONCE
JMP I BIT
/ 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
HELPMS, JMS I [PRINT
TEXT "USE CCL 'HELP' COMMAND"
JMP I [GOAWAY
PAGE
SYNTAX, CLA
JMS PRINT
TEXT "? BAD SYNTAX"
GOAWAY, TAD ESCBIT
SZA CLA
JMP I [MONIT5 /LINE ENDED WITH ESCAPE
TAD I [READ /WAS 'READ' EVER CALLED?
SZA CLA
JMP I [START /YES, GET A NEW LINE
JMP I [MONIT5 /NO, WE MUST'VE BEEN CHAINED TO, RECALL KBM
PRINT, 0 //ROUTINE TO PRINT TEXT STRING
TAD I PRINT /CHARACTER STORED SIX BIT
RTR /ISOLATE FIRST CHARACTER IN WORD
RTR
RTR
JMS PRIN
TAD I PRINT /ISOLATE SECOND CHARACTER
JMS PRIN
ISZ PRINT /ZERO SIGNALS END OF TEXT STRING
JMP PRINT+1
LV, JMS I [CRLF
ISZ PRINT /POINT TOWARD PROPER RETURN
PRCDF, CIF 0 /CHANGED BY FIELD ONE CALL
JMP I PRINT
PRIN, 0
AND [77 /ISOLATE SIX BIT CHARACTER
SNA
JMP LV /IF ZERO, END OF STRING
TAD [240 /PROCESS CHARACTER
AND [77 /IS IT A # OR LETTER?
TAD [240
DCA T3 /EITHER WAY EVERYTHING COMES OUT ALRIGHT
TAD [200
KRS /TEST FOR CTRL/C
TAD (-203
SNA
JMP CTRLC /THERE IT IS!
TAD (203-217 /TEST FOR CTRL/O
SNA CLA
JMS CTRLO
KCC //V4: FOR THE 278. (WON'T GET HERE FROM CCL)
TAD T3 /TYPE CHARACTER
JMS I [TYPE
JMP I PRIN
CTRLC, TAD ["^
JMS I [TYPE
TAD ("C
JMS I [TYPE /ECHO "^C"
JMS I [DELAYY
JMP I [MONIT /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
NUMBIG, JMS PRINT
TEXT "? NUMBER TOO BIG"
JMP I [GOAWAY
NONEX, JMS PRINT
TEXT "? CAN'T - DEVICE DOESN'T EXIST"
JMP I [GOAWAY
SYSERR, JMS PRINT
TEXT "? I/O ERROR ON SYS:"
JMP I [GOAWAY
FIX2P, 0
TAD (66
DCA I TB
ISZ .-1
ISZ KTR
JMP .-4
JMP I FIX2P
TB, TP1;TP2;TP3;TP4
KTR, -4
//ROUTINE TO JUMP TO SET HANDLER CODE
//IN FIELD ONE
DRIVER, 0
CIF CDF 10
JMP I (HSET
PAGE
SYSINI, 0 //SET SYS INIT COMMAND COMES HERE
JMS I [GETC /SEE IF WE HAVE A COMMAND?
SNA CLA
JMP DEFINI /ASSUME @INIT
TAD NO /TEST FOR NO INIT
SZA CLA
JMP I [SYNTAX /SET SYS NO INIT CMD
JMS I [BACKC /RESET POINTER
TAD LINPTR
DCA SAVLP
TAD (-6 /ALLOW A MAXIMUM OF 5 CHARS
DCA SAVKN
SAVLUP, JMS I [GETC
SNA CLA
JMP DEFDO /GOT THE COMMAND GO SET
ISZ SAVKN
JMP SAVLUP
JMS I [PRINT
TEXT "? INIT COMMAND TOO BIG"
JMP I [GOAWAY
SAVKN, 0
SAVLP, 0
INIT= 1107 //IN OS8V4.PA; ENTRY FOR SET SYS INIT
KMNTRY= 0400 // ENTRY FOR SET SYS NO INIT
DEFINI, TAD (INIMSG /DEFAULT INIT COMMAND
DCA SAVLP
DEFDO, JMS I [SHNDLR /READ IN BOOTSTRAP PROGRAM FROM BLOCK ZERO
200
AUXBUF
TP1, 0
JMP I [SYSERR
TAD NO /WAS INIT SET OR DELETED?
SZA CLA
TAD (KMNTRY-INIT /NO INIT; STORE "KMNTRY" AS MONITOR LOC. TO JUMP TO
TAD (INIT /IF INIT IS SET STORE "INIT" AS MONITOR LOC. TO JUMP TO
DCA I (AUXBUF+77 /IN LOCATION 77 OF BOOTSTRAP
JMS I [SHNDLR /WRITE BOOTSTRAP
4200
AUXBUF
TP2, 0
JMP I [SYSERR
TAD NO /WAS THERE A COMMAND?
SZA CLA
JMP I SYSINI /IF NOT, RETURN ...
JMS I [SHNDLR /YES, IT'S NECESSARY TO STORE IT IN THE MONITOR
200
AUXBUF
11 /READ IN BLOCK 11 (KMON 1000-1377) ON THE DEVICE
JMP I [SYSERR
STA
TAD SAVLP /SET UP POINTER TO THE COMMAND
DCA XR2
TAD (AUXBUF-1 /SET UP POINTER TO THE BUFFER(=LOC 1000 OF MONITOR)
DCA XR3
TAD (-5 /MAXIMUM OF 5 CHARS IN COMMAND
DCA SAVKN
MOVL, TAD I XR2 /STORE COMMAND
DCA I XR3
ISZ SAVKN
JMP MOVL
JMS I [SHNDLR /WRITE BACK TO THE DISK AREA
4200
AUXBUF
11
JMP I [SYSERR
JMP I SYSINI
INIMSG, "@;"I;"N;"I;"T;0
/TABLE FOR SET SYS OS8 OS78 OS278
ODT1, MOD5; LXM; LXM; CLA
0
ODT2, MOD6; LXM; LXM; CLA
0
ODT3, MOD7; RXM; RXM; NOP
MOD8; LXM; LXM; CLA
MOD9; 4573; 4573; CLL RTL
MOD10; NOP; NOP; RAL
0
//CALLED TO ACCESS SPACE ROUTINE
//FROM FIELD 1
SPACE1, 0
JMS I (SPACE
CIF CDF 10
JMP I SPACE1
//CALLED TO ACCESS GETDEV ROUTINE
//FROM FIELD 1
DEVGET, 0
JMS I [GETDEV /CALL GETDEV
CIF CDF 10 /SET UP DATA AND INSTRUCTION FIELDS
JMP I DEVGET /RETURN
*1000
/LOCATIONS 1000-1377
/RESERVED FOR OS8 LINE BUFFER
*1400
/******THIS AREA IS USED UNDER PS/8 FOR LINE BUFFER******
/IF USING A PS8 SYSTEM THE "SET SYS OS8, OS78 OR OS278" CANNOT BE USED
/DEFINITIONS FOR SYSTEM MODIFICATIONS
MONIT0= 0
KMON11= 11
KMON12= 12
ODT60= 60
ODT61= 61
ODT63= 63
SAVE64= 64
MOD0= AUXBUF+371 /IN KEYBOARD MONITOR: OS8-OS78-OS278 I.D. BIT
MOD1= AUXBUF+67 / OS8-OS78-OS278 I.D. BIT
MOD2= AUXBUF+64 / KT8A INSTRUCTION LXM-->NOP
MOD3= AUXBUF+264 / KT8A INSTRUCTION LXM-->CLA
MOD4= AUXBUF+301 / KT8A INSTRUCTION LXM-->CLA
MOD5= AUXBUF+240
MOD6= AUXBUF+265 / KT8A INSTRUCTION LXM-->CLA
MOD7= AUXBUF+51 / KT8A INSTRUCTION RXM-->NOP
MOD8= AUXBUF+54 / KT8A INSTRUCTION LXM-->CLA
MOD9= AUXBUF+67 / JMS I [XLODE-->CLL RTL
MOD10= AUXBUF+70 / NOP-->RAL
LXM= 6200
RXM= 6230
/THE FOLLOWING SYSXXX ROUTINE WERE ADDED OR MODIFIED FOR V4 VERSION
SYSOS8, 0
TAD NO
SZA CLA
JMP ERRNO /CAN'T USE 'NO' MODIFIER
IAC
DCA NO /FOR OS8 NO=1
IAC
JMS SYSMOD
JMS I [PRINT
TEXT "OS8 SYS"
JMP I SYSOS8
SYS78, 0
TAD NO
SZA CLA
JMP ERRNO
DCA NO /FOR OS78 NO=0
CLL CLA IAC RAL /AC=2
JMS SYSMOD
JMS I [PRINT
TEXT "OS78 SYS"
JMP I SYS78
SYS278, 0
TAD NO
SZA CLA
JMP ERRNO
CLA CLL CML RAR /SET AC 4000
DCA NO /FOR OS278 NO=4000
CLA STL IAC RAL /AC=3
JMS SYSMOD
JMS I [PRINT
TEXT "OS278 SYS"
JMP I SYS278
ERRNO, JMS I [PRINT
TEXT "? CAN'T USE 'NO' MODIFIER"
JMP I [GOAWAY
SYSMOD, 0
DCA SYSSWT /SAVE SYSTEM SWITCH; 0=OS8; 1=OS78; 2=OS278
TAD [7771
JMS I [SET200 /SET SYS I.D. BIT IN CORE
JMS I [MODBLK /DO THE PATCHING
MONIT0 /BLOCK TO BE MODIFIED
MONIT1 /POINTER TO TABLE
JMS I [MODBLK
KMON11
KM1
JMS I [MODBLK
KMON12
KM2
JMS I [MODBLK
SAVE64
SAV1
JMS I [MODBLK
ODT60
ODT1
JMS I [MODBLK
ODT61
ODT2
JMS I [MODBLK
ODT63
ODT3
STA
TAD SYSSWT /GET CURRENT SYS BEING SET
SNA CLA
IAC
DCA NO /RESET 'NO' TO PROPER MEANING
/ JMS I SYMOD1 /TIME TO AFFECT CCL
JMP I SYSMOD
/SYMOD1, FIXCCL
/TABLE FOR SET SYS OS8 OS78 OS278
MONIT1, MOD0; HLT; HLT+200; HLT+4
0
KM1, MOD1; HLT; HLT+200; HLT+4
0
KM2, MOD2; LXM; LXM; NOP
MOD3; LXM; LXM; CLA
0
SAV1, MOD4; LXM; LXM; CLA
0
PAGE
/THIS ROUTINE WILL READ A BLOCK, PATCH SPECIFIC LOCATIONS AND WRITE THE BLOCK
/PRIOR TO ENTER THIS ROUTINE "SYSSWT" MUST BE SET FOR THE PROPER SYSTEM
/ JMS I [MODBLK
/ BLOCK#
/ POINTER TO TABLE
MODBLK, 0
TAD I MODBLK /BLOCK #
ISZ MODBLK
DCA MDBLKR /TO BE READ
TAD MDBLKR
DCA MDBLKW /TO BE WRITTEN
BLKRD, JMS I [SHNDLR /READ THE BLOCK
0200
AUXBUF
MDBLKR, 0
JMP I [SYSERR
TAD I MODBLK /POINTER TO TABLE OF CHANGES
ISZ MODBLK
DCA MODTBL /SAVE IT
MDBLK0, TAD I MODTBL /GET LOCATION TO BE PATCHED
SNA
JMP BLKWRT /ALL DONE FOR THIS BLOCK
DCA MODLOC /SAVE LOCATION TO BE PATCHED
TAD MODTBL
TAD SYSSWT /1=OS8; 2=OS78; 3=OS278
DCA TBLPTR /SET POINTER TO THE PROPER LOCATION OF THE NEW CONTENT
TAD MODTBL
TAD [4 /ADJUST POINTER TO NEXT ENTRY
DCA MODTBL
TAD I TBLPTR /GET NEW CONTENT
DCA I MODLOC /PATCH IT
JMP MDBLK0 /MORE?
BLKWRT, JMS I [SHNDLR /WRITE THE BLOCK BACK
4200
AUXBUF
MDBLKW, 0
JMP I [SYSERR
JMP I MODBLK
MODTBL, 0
MODLOC, 0
TTESC, 0 //ROUTINE TO PROCESS TTY ESC ATTRIBUTE V3D
JMS I (OLDTST /TEST FOR KL8E
TAD NO
SZA CLA
TAD (1377-NOP
TAD (NOP
DCA I (HNDLBF+XMIT8
JMP I TTESC
XMIT8= 214 //LOCATION IN VA0 SERIAL HANDLERS
GENBLK, 0 //HANDLES INPUT RELATING TO ANY DEVICE
JMS I (GENCMN /GO GET THE COMMAND
TAD NUM2
DCA BLOK /GET BLOCK NUMBER
TAD (LOC
JMS I [KEYSRCH /SEARCH FOR "LOC" KEY WORD
JMP I [SYNTAX
JMS I (GENCMN /GET LOCATION
TAD [-400 /LOC NUMBER MUST BE LESS THAN 400
CLL
TAD NUM2
SZL CLA
JMP I [NUMBIG /IF NOT, NUMBER TOO BIG
TAD NUM2
TAD PAUXBUF /BUFFER START
DCA NUM2 /NOW POINTS TO LOC IN MEMORY
JMS I ENTRY /READ BLOCK FROM SUPPLIED DEVICE
200
PAUXBUF,AUXBUF
BLOK, 0
JMP I [SYSERR
TAD TEMP /CONTAINS COMMAND LINE DELIMITER
SNA CLA
JMS I (ODT /NO DELIMITER CALL ODT
JMS I [ONUM /NO DELIMITER IMPLIES MORE LINE INPUT
DCA NUM /STORE NUMBER
CLA IAC
DCA DEVNUM /FAKE OUT - PREVENTS RE-WRITING USED HANDLER
TAD FLG
SZA CLA /IF FLG IS SET, NO DIGITS INPUT
JMP I GENBLK /SO, RETURN
JMS I [GETC
SZA CLA /SHOULDN'T BE ANY OTHER CHARS AFTER THAT
JMP I [SYNTAX
TAD NUM /VALUE INPUT
DCA I NUM2 /SET NEW VALUE
TAD BLOK
DCA BLOK2 /SET UP BLOCK FOR WRITE
JMS I ENTRY /WRITE TWO PAGES
4200
AUXBUF
TEMP2,
BLOK2, 0
JMP I [SYSERR
JMP I GENBLK
BADINP, JMS I [PRINT
TEXT "? BAD INPUT"
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 USERS WISH TO PATCH THIS PROGRAM
/SCAN PAST EXTRA LETTERS OR DIGITS
SCAN, 0
JMS I [ALPHA /ISOLATE NEXT CHARACTER
JMP NOPE /RETURNS HERE IF LETTER OR DIGIT
CLA /OTHERWISE MOVE PAST IT
JMP SCAN+1
NOPE, CLA /MOVE POINTER BACK TO LAST NON-DIGIT, NON LETTER
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 //ROUTINE TO IDENTIFY INFO IN AC
DCA T /ENTER WITH STRING OF POSSIBLE INFO
BR2, TAD I BRANCH
ISZ BRANCH
SNA /ZERO IS THE DELIMITER OF INFO
JMP NOTFND /NOT FOUND
TAD T
SNA CLA /STRING IS NEGATIVE OF INFO
JMP FOUND /SO IF AC IS NON-ZERO WE'VE FOUND IT
ISZ BRANCH /OTHERWISE LOOP
JMP BR2
FOUND, TAD I BRANCH
DCA T
JMP I T /FOUND ITEM IN COL 1, JUMP TO ADDRESS IN COL 2
NOTFND, TAD T
JMP I BRANCH /IF NOT FOUND IN COL 1, RETURN WITH AC INTACT
BADKBM, CDF 0
JMS I [PRINT
TEXT "? OLD VERSION OF KBM"
JMP I [GOAWAY
LLS= 6666
DBTD= 6574
LSF= 6661
DBST= 6570
LP78, 0
TAD (CMA-NOP
JMS LP8A
JMP I LP78
LP8A, 0
TAD (NOP /AC MAY BE NON-0
DCA LPKOD
JMS I (LPTST1
TAD VNO
TAD (-2
SNA CLA
JMP I (OLDERR
JMS I [SRCH
0;200;7700
JMP I (OLDERR
TAD (3
DCA TEMP
TAD I TEMP
AND [7000
TAD [-7000
SZA CLA /NOP OR CMA
JMP I (OLDERR
TAD LPKOD
DCA I TEMP
ISZ TEMP
TAD I TEMP
AND [7000
TAD (-6000
SZA CLA
JMP I (OLDERR
TAD LPKOD
AND [70
SZA CLA
TAD (DBTD-LLS
TAD (LLS
DCA I TEMP
ISZ TEMP
TAD LPKOD
DCA I TEMP
JMS I [SRCH
100;100;6203
JMP I (OLDERR
TAD (2
DCA TEMP
TAD LPKOD
AND [70
SZA CLA
TAD (DBST-LSF
TAD (LSF
DCA I TEMP
JMP I LP8A
LPKOD, 0
//ROUTINE TO EXECUTE THE SYSTEM DEVICE CHANGER
//SET SYS DEVICE
//THIS CODE RUNS IN FIELD THREE
SYSNEW, 0
CIF CDF 30
JMP I (CHGSYS /FIELD THREE ROUTINE
PAGE
/READ A LINE INTO OS/8 LINE BUFFER
READ, 0
DCA CTOFLG /ALLOW ECHOING
RD1, TAD [LINBUF
DCA LINPTR
DCA ESCBIT
GT, JMS I [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
-223;GT /IGNORE ^S
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 I [TYPE /ECHO IT
TAD TEMP /INSERT IN BUFFER
DCA I LINPTR
ISZ LINPTR /BUMP POINTER
JMP GT /NEXT
CTRLU, TAD ["^
JMS I [TYPE
TAD ("U
JMS I [TYPE /ECHO "^U" <CR><LF>
JMS I [CRLF
RDA, TAD ("#
JMS I [TYPE
JMP RD1
BS=10
RUBOUT, TAD LINPTR
TAD [-LINBUF
SNA
JMP BOL /AT BEGIN OF LINE
TAD [LINBUF-1
DCA LINPTR /MOVE POINTER BACK ONE
TAD SCOP
SZA CLA
RUB3X, TAD (BS-"\
TAD ["\
JMS I [TYPE /ECHO "\"
RUB3, TAD SCOP
SNA CLA
JMP .+3
TAD [40
SKP
TAD I LINPTR
JMS I [TYPE /ECHO RUBBED-OUT CHARACTER
TAD SCOP
SNA CLA
JMP GT2
TAD [BS
JMS I [TYPE
GT2, JMS I [GET
JMS I [BRANCH
-377;RUB2
-216;GT2 /IGNORE ^O
-203;CTRLC /^C
0
DCA TEMP /A NEW CHAR
TAD SCOP
SZA CLA
JMP .+3
TAD ["\
JMS I [TYPE /ENCLOSE RUBBED-OUT CHARS IN \'S
TAD TEMP
JMP LOOK
RUB2, TAD LINPTR
TAD [-LINBUF
SNA
JMP BOL2
TAD [LINBUF-1
DCA LINPTR
TAD SCOP
SNA CLA
JMP RUB3
JMP RUB3X
BOL2, TAD SCOP
SZA CLA
JMP BOL
TAD ["\
JMS I [TYPE
BOL, JMS I [CRLF
JMP RDA
ESCAPE, TAD ["$ /ECHO ESCAPE AS DOLLAR SIGN
JMS I [TYPE
ISZ ESCBIT /NOTE ESCAPE
CR, DCA I LINPTR /INSERT 0 AT END
JMS I [CRLF
JMP I READ /RETURN, WE GOT LINE
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
/GET A DECIMAL NUMBER, RETURN IT IN AC
NUMBER, 0
DCA NUM
CLA IAC
DCA FLG
JMS I [BACKC
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
/ 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
JMS I (HANTES /GO TEST FOR SET HANDLER COMMAND
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 (HNDLBF+1 /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 /POINT INTO DEVICE CONTROL WORD TABLE
CDF 10
TAD I DCWPTR /GET DCW
DCA DCW
TAD DCW
RTR
RAR
AND [77
DCA DEVTYP
STA
TAD I (37 /GET ADDRESS OF DHIT
DCA DHIT
TAD DHIT
TAD DEVNUM
DCA DHI
TAD I DHI
CDF 0
DCA DHI
TAD DHI
RTL
RTL
RTL
AND (17
SZA
TAD (15
DCA DBLK
JMP I GETDEV
DELAYY, 0
TAD (-10
DCA OUTER
ISZ ZER
JMP .-1
ISZ OUTER
JMP .-3
JMP I DELAYY
ZER, 0
OUTER, -10
PAGE
OLDTST, 0 /V3D
JMS I (ASRTST
TAD VNO
JMS I [BRANCH
-1;OLDERR
-2;OLDERR
-3;OLDERR
-4;OLDERR
-5;OLDERR
-6;OLDERR /OS78 V3.0-SET 6A
-260;TSTOK /TTY VER FOR OS278 IS B0
0
JMP I [NEWERR
TSTOK, JMP I OLDTST
TTPAUS, 0
JMS OLDTST
DCA NUM
JMS I [GETC
SNA CLA
JMP NOPA /NO PAUSE VALUE
TAD NO
SZA CLA
JMP I [SYNTAX /SET TTY NO PAUSE N
JMS I [NUMBER
SNA
JMP BADPAUS
DCA NUM
TAD NUM /SCALE CORRECTLY
CLL RAL
TAD NUM
CLL RTL
DCA NUM
TAD FLG
SZA CLA
JMP BADPAUS /NO DIGITS
TAD NUM
AND [6000
SZA CLA
JMP BADPAUS
TAD NUM
CIA
DCA I (HNDLBF+ROUTER
NOPA, JMS I (BASLUK
JMP I TTPAUS
TAD NUM
CIA
DCA I (AUXBUF+1
JMS I (BASWRI
JMP I TTPAUS
ROUTER= 236 //LOCATION IN VA0 SERIAL HANDLERS
BADPAUS,JMS I [PRINT
TEXT "? BAD VALUE FOR PAUSE DURATION"
JMP I [GOAWAY
ONUM, 0
DCA NUM
CLA IAC
DCA FLG
ONM1, JMS I [GETC
TAD (-"0-10 /CONVERT TO DIGIT
CLL
TAD [10
SNL
JMP OEON
DCA T4
DCA FLG
TAD NUM
AND [7000
SZA CLA
JMP I [NUMBIG
TAD NUM
CLL RTL
RAL
TAD T4
DCA NUM
JMP ONM1
OEON, CLA
JMS I [BACKC
TAD NUM
JMP I ONUM
PAGE
TTCOL, 0
TAD NO
SZA CLA
JMP I [SYNTAX /SET TTY NO COL
JMS I [GETC
SNA CLA
JMP BADCOL /NO COL SPECIFIED
JMS I [NUMBER
SNA
JMP BADCOL
DCA NUM
TAD FLG
SZA CLA
JMP I [SYNTAX
TAD NUM
AND [7770
SZA CLA
JMP BADCOL
TAD (CCLNAM /READ IN CCL.SV
JMS I [LOOKUP
JMP CCLNF /CCL NOT FOUND
TAD (2 /WANT 2ND BLOCK IN CCL
DCA ARG2 /CCL LOCATIONS 12400-12777
JMS I (SHNDLR
200 /READ IN 2 PAGES
AUXBUF
ARG2, 0
JMP I [SYSERR
TAD ARG2
DCA ARG3
TAD I (AUXBUF /GET PTR TO DIRECT COL WORD
SPA
JMP OLDCCL
TAD (AUXBUF-2400 /RELOCATE
DCA ARG2
TAD NUM
DCA I ARG2
JMS I (SHNDLR
4200
AUXBUF
ARG3, 0
JMP I [SYSERR
JMP I TTCOL
BADCOL, JMS I [PRINT
TEXT "? BAD COLUMN COUNT"
JMP I [GOAWAY
OLDCCL, CLA
JMS I [PRINT
TEXT "? WRONG VERSION OF CCL"
JMP I [GOAWAY
TYPE, 0
DCA TYPEM
JMS I [DELAYY
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
CCLNAM, FILENAME CCL.SV
CCLNF, JMS I [PRINT
TEXT "? CCL.SV NOT FOUND"
JMP I [GOAWAY
CCLBLK=67
/NO! NO! NO! NO! NO! ... NO MORE FOR OS278
//PATCH THE CCL COMMAND TABLE TO ALLOW "BACKSPACE" IF OS/8;
//OR "TERMINATE" IF OS/78 OR OS/278. IF "NO" IS ZERO, MEANS
//78 OR 278.
/FIXCCL, 0
/ JMS I [SHNDLR //READ IN CCL COMMAND TABLE
/ 200
/ AUXBUF
/ CCLBLK
/ JMP I [SYSERR
/ TAD I (AUXBUF
/ TAD (-VERSION //V4 IS VERSION "A0"
/ SZA CLA
/ JMP I (OLDCCL //WRONG VERSION
/ TAD (CCLTBL
/ JMS I (FIXUP //WITH POINTER TO PATCHES TO USE.
/ JMS I [SHNDLR
/ 4200
/ AUXBUF
/ CCLBLK //WHEN DONE, WRITE IT BACK OUT.
/ JMP I [SYSERR
/ JMP I FIXCCL
PAGE
ESC, "E;"S;"C;4000+"A;4000+"P;4000+"E;0
TTHGHT, 0
JMS I (OLDTST
JMS I [GETC
SNA CLA
JMP I (BADHIT /NO HEIGHT
TAD NO
SZA CLA
JMP I [SYNTAX /SET TTY NO HEIGHT
JMS I [NUMBER
SNA
JMP I (BADHIT
DCA NUM
TAD FLG
SZA CLA
JMP I (BADHIT /NO DIGITS
TAD NUM
CIA
DCA I (HNDLBF+DEPTH
TAD I (HNDLBF+DEPTH
DCA I (HNDLBF+RDEPTH
JMS I (BASLUK
JMP I TTHGHT
TAD NUM
CIA
DCA I (AUXBUF
JMS I (BASWRI
JMP I TTHGHT
DEPTH= 241 //LOCATION IN VA0 SERIAL HANDLERS
RDEPTH= 242
/ LOC YES NO
KBMTBL, AUXBUF+315; 0210; 1073
AUXBUF+316; 1315; 2020
AUXBUF+320; 1326; 7240
AUXBUF+321; 4423; 3020
AUXBUF+324; 1315; 1440
0
CDTBL, AUXBUF+135; 0210; 1102
AUXBUF+136; 1335; 2024
AUXBUF+140; 1346; 7240
AUXBUF+141; 4466; 3024
AUXBUF+144; 1335; 1420
0
CCLTBL, AUXBUF+4; 0024; 0002
AUXBUF+5; 0522; 0143
AUXBUF+6; 5551; 5363
AUXBUF+7; 5600; 6000
0
SCPTBL, HNDLBF+123; 1233; 1326
HNDLBF+125; 1336; 5331
HNDLBF+126; 4636; 0377
0
AROW, "A;"R;"R;"O;"W;0
PAGE
/ SCOPE BIT ON DISK:
/ BLOCK 0 REL 126 BIT 4
/ SCOPE BIT IN MEMORY:
/ LOC 17726 BIT 4
TTSCOP, 0
JMS I (OLDTST
TAD (SCPTBL
JMS FIXUP
JMS I (SHNDLR
200
AUXBUF /READ 2 PAGES INTO AUXILIARY BUFFER
11
JMP I [SYSERR
TAD (KBMTBL
JMS FIXUP
JMS I (SHNDLR
4200
AUXBUF
11
JMP I [SYSERR
JMS I (SHNDLR
200
AUXBUF /READ BLOCK 53 (CD)
53
JMP I [SYSERR
TAD (CDTBL
JMS FIXUP
JMS I (SHNDLR
4200
AUXBUF
53
JMP I [SYSERR
TAD NO /SET SCOPE BIT
SNA CLA
IAC
DCA SCOP
CDF 10
TAD (SCPBIT
JMS SET200
CDF 0
JMS I (SHNDLR
200
AUXBUF
TP3, 0 //GETS BLOCK 66 FROM FIX2P IF 2-PAGE SYSTEM HANDLER.
JMP I [SYSERR
TAD (AUXBUF+126
JMS SET200
JMS I (SHNDLR
4200
AUXBUF
TP4, 0
JMP I [SYSERR
JMP I TTSCOP
SET200, 0 //DF IS SPECIALLY SET
DCA HLTPTR
TAD I HLTPTR
AND (7573 //V4 I.D. BIT FOR OS8=7402; OS78=7602; OS278=7406
DCA TEMP
TAD TEMP
TAD (-HLT
SZA CLA
JMP I (BADKBM
TAD NO /SEE IF 278
SMA CLA
JMP SETOS8 /NO, OS8 OR OS78
TAD [4 /WAS 278, SET THE PROPER BIT
JMP SET278
SETOS8, TAD NO
SPA SNA CLA
TAD [200
SET278, TAD TEMP
DCA I HLTPTR
JMP I SET200
HLTPTR, 0
//ROUTINE TO PATCH LOCATIONS. BLOCK OF MODULE TO BE PATCHED HAS
//BEEN READ INTO AUXBUF. ENTER WITH POINTER TO TABLE TO USE.
//TABLE IS ARRANGED: RELATIVE LOCATION; "YES" VALUE; "NO" VALUE.
FIXUP, 0
DCA FIXPTR
FIXLUP, TAD I FIXPTR
SNA
JMP I FIXUP
DCA FIXLOC
ISZ FIXPTR
TAD NO //"NO"=1; "YES"=0.
SZA CLA
ISZ FIXPTR
TAD I FIXPTR
DCA I FIXLOC
TAD NO
SNA CLA
ISZ FIXPTR
ISZ FIXPTR
JMP FIXLUP
FIXPTR, 0
FIXLOC, 0
PAGE
BASNAM, FILENAME BASIC.SV
BASLUK, 0
TAD (BASNAM
JMS I (LOOKUP
JMP I BASLUK
ISZ BASLUK
TAD (7
DCA BASBLK
JMS I [SHNDLR
200
AUXBUF
BASBLK, 0
JMP I [SYSERR
TAD BASBLK
DCA BASB2
TAD I (AUXBUF+2
SNA CLA
JMP I BASLUK
JMP I (OLDBAS
BASWRI, 0
JMS I [SHNDLR
4200
AUXBUF
BASB2, 0
JMP I [SYSERR
JMP I BASWRI
GETIOT, 0
ISZ RR
TAD RR
TAD (-7600
SNA CLA
JMP I GETIOT
TAD I RR
AND [7000
TAD [-6000
SZA CLA
JMP GETIOT+1
TAD I RR
RTR
RAR
AND [77
TAD (-20
CLL RAR
SNA
JMP GETIOT+1
RAL
TAD (20
ISZ GETIOT
JMP I GETIOT
NOTIMPL,CLA CLL
JMS I [PRINT
TEXT "? COMMAND NOT IMPLEMENTED"
JMP I [GOAWAY
SET, JMS I [SPACE
DCA VNO /V3C
JMS I [GETDEV
JMS I [GETC
JMS I [BRANCH
-":;COLN
-" ;COLN
-"-;HYPH
0
JMP I [SYNTAX /NO : OR BLANK AFTER NAME
BADHIT, JMS I [PRINT
TEXT "? BAD HEIGHT SPECIFIED"
JMP I [GOAWAY
PAGE
COLN, STA
JMS I [SPACE /IGNORE OPTIONAL SPACES
JMS I [GETC
SNA
JMP I [SYNTAX
TAD (-"-
SNA CLA
JMP HYPH
JMS I [BACKC
STA
TAD DEVNUM
SNA CLA
JMP SYSDV
COLN2, DCA NAM1
DCA NAM2
TAD (MAIN-1 /LOOK FOR DEVICE TYPE IN MAIN TABLE
MNLUP, DCA XR1
TAD I XR1
SMA SZA
JMP NOTYP /NOT FOUND
TAD DEVTYP
SNA CLA
JMP FNDTYP
TAD XR1
TAD (3 /POINT TO NEXT ENTRY
JMP MNLUP
FNDTYP, TAD I XR1 /GET GENERIC NAME
DCA NAM1
TAD I XR1
DCA NAM2
DCA AUXFLG
TAD I XR1 /GET PTR TO DEVICE TABLE
INTO, DCA PTR
DCA NO
TAD LINPTR
DCA SAVPTR /SAVE SCAN POINTER
JMS I [GETTWO
TAD (-1617
SNA CLA /ARE NEXT TWO CHARS 'NO'?
JMS SAWNO /YES
TAD SAVPTR /NO
DCA LINPTR /RESTORE PTR
SCNLUP, TAD I PTR
SNA /GET NEXT KEYWORD POINTER
JMP NOKEY
ISZ PTR /POINT TO PTR TO ROUTINE
JMS I [KEYSRCH
JMP NOF /NOT FOUND
TAD I PTR /FOUND
DCA PTR /GET PTR TO ROUTINE
STA
TAD DEVNUM
SZA CLA
JMS I (HREAD /READ HANDLER
JMS I PTR /CALL ROUTINE
STA
TAD DEVNUM
SZA CLA
JMS I (HWRITE /REWRITE HANDLER
JMP I (DONE
SYSDV, ISZ AUXFLG
TAD (SYSAUX
JMP INTO /V3D ALLOW SET SYS:
HYPH, JMS I [ALPHA
JMP I [BADV
DCA VNO
TAD VNO
SNA
JMP I [BADV
AND [17
DCA VNO
JMS I [SPACE /IGNORE SPACE
JMP COLN2
NOKEY, TAD AUXFLG
SNA CLA
JMP NOO
JMS I [PRINT
TEXT "? UNKNOWN ATTRIBUTE FOR DEVICE "
*.-1
NAM1, 0
NAM2, 0
0
JMP I [GOAWAY
SAWNO, 0
ISZ NO
STA
JMS I [SPACE
TAD LINPTR
DCA SAVPTR
JMP I SAWNO
NOTYP, CLA
ISZ AUXFLG
TAD (AUX /SEARCH AUXILIARY TABLE
JMP INTO
NOF, ISZ PTR
TAD SAVPTR
DCA LINPTR
JMP SCNLUP
AUXFLG, 0
NOO, ISZ AUXFLG
TAD (AUX
DCA PTR
JMP SCNLUP
PAGE
HREAD, 0
TAD DBLK
SNA
JMP RESERR
DCA BLOCK
JMS I [SHNDLR
200 /READ 2 PAGES
L7200, HNDLBF /INTO 7200-7577
BLOCK, 0 /FROM THIS BLOCK ON SYSTEM DEVICE
JMP I [SYSERR
TAD DHI
AND [177 /GET RELATIVE ENTRY PT
TAD L7200
DCA ENTRY
TAD VNO
SZA CLA /V3C
JMP I HREAD /VNO ALREADY SET BY - COMMAND
TAD ENTRY
VLOOP, DCA VNOPTR
TAD I VNOPTR
IFZERO VOS278 <
CLL
TAD [-33
SZL CLA
JMP BACKV
TAD I VNOPTR
SNA
JMP OLDERR
> //V4: JUST COLLECT THE VERSION NUMBER--PROCESS IT LATER.
DCA VNO
JMP I HREAD
BACKV, STA
TAD VNOPTR
JMP VLOOP
RESERR, JMS I [PRINT
TEXT "? CAN'T - DEVICE IS RESIDENT"
JMP I [GOAWAY
OLDERR, CLA
JMS I [PRINT
TEXT "? CAN'T - OBSOLETE HANDLER"
JMP I [GOAWAY
NOTV4, CLA CLL
JMS I [PRINT
TEXT "? COMMAND NOT ALLOWED IN OS278"
JMP I [GOAWAY
HWRITE, 0
TAD BLOCK
DCA BLKTWO
JMS I [SHNDLR
4200
HNDLBF
BLKTWO, 0
JMP I [SYSERR
JMP I HWRITE
NEWERR, CLA
JMS I [PRINT
TEXT "? CAN'T - UNKNOWN VERSION OF THIS HANDLER"
JMP I [GOAWAY
MAIN, -0; DEVICE TTY; TTYTBL
-3; DEVICE CDR; CDRTBL
-4; DEVICE LPT; LPTTBL
-20; DEVICE MTA; MTATBL
-36; DEVICE SERL; SERTBL
1
/TABLE ENDS WITH A POSITIVE NON-ZERO NUMBER
LPTTBL, WIDTH; LPWDTH
LC; LPLC
LV8E; LPLV
LA8A; LP8A
LA78; LP78
BAUD; STBAUD
0
MTATBL, PARITY; MTAPAR
DENSITY;MTADEN
FILES; MTAFIL
0
AUX, LOC; GENLOC
FILES; GENFIL
READO; GENREA
VERS; GENVER
DVCO; GENDVC /V3D
BLK; GENBLK /V3D
0
SYSAUX, INITSY; SYSINI / - SET SYS [NO] INIT
OS8; SYSOS8 / - SET SYS OS8
OS78; SYS78 / - SET SYS OS78
OS278; SYS278 /VB0- SET SYS OS278
DEVIC; SYSNEW /V4 - SET SYS DEVICE
0
WIDTH, "W;"I;"D;"T;"H;0
LC, "L;"C;0
LV8E, "L;"V;4000+"8;4000+"E;0
CODE, "C;"O;"D;"E;0
ALT, "A;"L;"T;4000+"M;4000+"O;4000+"D;4000+"E;0
ECHO, "E;"C;"H;"O;0
PAYGE, "P;"A;"G;"E;0
TAB, "T;"A;"B;0
LOC, "L;"O;"C;4000+"A;4000+"T;4000+"I;4000+"O;4000+"N;0
FILES, "F;"I;"L;"E;4000+"S;0
READO, "R;"E;"A;"D;4000+"O;4000+"N;4000+"L;4000+"Y;0
VERS, "V;"E;"R;4000+"S;4000+"I;4000+"O;4000+"N;0
PARITY, "P;"A;"R;4000+"I;4000+"T;4000+"Y;0
DENSITY,"D;"E;"N;4000+"S;4000+"I;4000+"T;4000+"Y;0
FILL, "F;"I;"L;"L;0
FLAGG, "F;"L;"A;"G;0
CTRL, "C;"T;"R;"L;0
EVEN, "E;4000+"V;4000+"E;4000+"N;0
ODD, "O;4000+"D;4000+"D;0
DELAY, "D;"E;"L;"A;"Y;0
PAUS, "P;"A;"U;"S;"E;0
HGHT, "H;"E;"I;"G;"H;"T;0
SCOPP, "S;"C;"O;"P;"E;0
DVCO, "D;"V;"C;4000+"O;4000+"D;4000+"E;0
COL, "C;"O;"L;4000+"U;4000+"M;4000+"N;0
LA8A, "L;"A;"8;"A;0
LA78, "L;"A;"7;"8;0
INITSY, "I;"N;"I;"T;0
OS8, "O;"S;"8;0
OS78, "O;"S;"7;"8;0
OS278, "O;"S;"2;"7;"8;0 //VB0
BAUD, "B;"A;"U;"D;0
DEVIC, "D;"E;"V;4000+"I;4000+"C;4000+"E;0
HELP, "H;"E;"L;"P;0
PAGE
LPWDTH, 0
JMS I (GETWID
TSTCAL, JMS LPTST1
TAD NUM
CMA
DCA I (HNDLBF
JMP I LPWDTH
LPTST1, 0
TAD I (7201 /CHECK FOR ANNALEX PRINTER
SPA CLA
JMP I (L645
TAD (TSTCAL /WAS CALL FOR LPT WIDTH
CMA
TAD LPTST1
SNA CLA
JMP TESTOK /YES, SKIP LPTS CHECK
TAD I (7203 /NO
TAD (-2423 /CHECK FOR SERIAL LPT
SNA CLA
JMP I (SERLPT
TESTOK, TAD VNO
JMS I [BRANCH
-1;OLDERR
-2;LPTOK
-3;LPTOK
-261;LPTOK /VERSION OF LPTS HANDLER
ZBLOCK 2
0
JMP I [NEWERR
LPTOK, JMP I LPTST1
ASRTST, 0
TAD DHI
SPA CLA
JMP I ASRTST
JMS I [PRINT
TEXT "? CAN'T - NOT KL8E HANDLER"
JMP I [GOAWAY
GENVER, 0
TAD NO
SZA CLA
JMP I [SYNTAX
JMS I [ALPHA
JMP BADV
DCA NUM
TAD NUM
AND (40
SZA CLA
JMP BADV
TAD NUM
AND (37
DCA I VNOPTR
JMP I GENVER
GENREA, 0
CDF 10
TAD I DCWPTR
CLL RTL
CLL RAL
TAD NO
RAR
CML RAR
RAR
DCA I DCWPTR
CDF 0
JMP I GENREA
GENFIL, 0
CDF 10
TAD I DCWPTR
CLL RAL
CLL RAL /ZERO LINK
TAD NO
RAR
CML RAR
DCA I DCWPTR
CDF 0
JMP I GENFIL
BADV, CLA
JMS I [PRINT
TEXT "? BAD VERSION LETTER"
JMP I [GOAWAY
CRLF, 0
TAD [215
JMS I (TYPE
TAD [212
JMS I (TYPE
JMP I CRLF
PAGE
LPLV, 0
JMS I (LPTST1
TAD NO
CLL RTL
RTL
TAD (4
DCA I (7201
JMP I LPLV
LPLC, 0
JMS I (LPTST1
TAD NO
CLL RTL
RTL
RAL
CIA
DCA I (7202
JMP I LPLC
TTECHO, 0
JMS I [TTST1
TAD NO
SZA CLA
TAD (NOECHO-ECHOST
TAD (ECHOST
DCA I (HNDLBF+STECHO
JMP I TTECHO
STECHO= 0066 //LOCATION IN VA0 SERIAL HANDLERS
NOECHO= CLA
ECHOST= 4636
TTPAGE, 0
JMS I (OLDTST
TAD NO
SNA CLA
JMP TTPGE1 //PAUSE
TAD I (HNDLBF+STPAGE //NO PAUSE
DCA I (HNDLBF+STPAGE+1
JMP I TTPAGE
TTPGE1, TAD (SPAGY
DCA I (HNDLBF+STPAGE+1
JMP I TTPAGE
STPAGE= 0224 //LOCATION IN VA0 SERIAL HANDLERS
SPAGY= 2254
BADWID, JMS I [PRINT
TEXT "? ILLEGAL WIDTH"
JMP I [GOAWAY
BLK, "B;"L;"O;"C;"K;0
DONE, JMS I [CRLF
JMS I [PRINT
TEXT "DONE"
JMP I [GOAWAY
L645, JMS I [PRINT
TEXT "? CAN'T AFFECT ANNALEX LPT"
JMP I [GOAWAY
SERLPT, JMS I [PRINT
TEXT "? CAN'T AFFECT SERIAL LPT"
JMP I [GOAWAY
PAGE
REASEM, JMS I [PRINT
TEXT "? CAN'T - MUST REASSEMBLE KL8E SOURCE"
JMP I [GOAWAY
/ENTER WITH PTR TO POSSIBLE KEYWORD IN AC
KEYSRCH,0
DCA KPTR
KL, TAD I KPTR
ISZ KPTR
SNA
JMP GOTKEY
CIA
DCA TEMP
JMS I [ALPHA /IS IT ALPHANUMERIC?
JMP EOK /NO
TAD TEMP /COMPARE
CLL RAL /LOW ORDER 11 BITS
SNA CLA
JMP KL /MATCHED, KEEP LOOKING
JMP I KEYSRCH /DIDN'T MATCH
EOK, JMS I [BACKC
TAD TEMP
CIA /INPUT STREAM RAN OUT OR HIT SPACE
SPA CLA
JMP GOTKEY /SPACE OR EOL MATCH FLAGGED CHARACTER
JMP I KEYSRCH
KPTR, 0
GOTKEY, JMS I [SCAN
STA /SKIP EXTRA STUFF
JMS I [SPACE
ISZ KEYSRCH /TAKE GOOD RETURN 2
JMP I KEYSRCH
/SET BAUD RATE FOR THE SERIAL PRINTER PORT OF THE OS278
/INPUT=BAUD RATE INPUT=BAUD RATE
/ 0 = 50 8 = 1800
/ 1 = 75 9 = 2000
/ 2 = 110 10 = 2400
/ 3 = 134.5 11 = 3600
/ 4 = 150 12 = 4800
/ 5 = 300 13 = 7200
/ 6 = 600 14 = 9600
/ 7 = 1200 15 = 19200
STBAUD, 0
JMS I [GETWID /USING GETWID ROUTINE, SAVES SOME DOUBLE CODING
TAD NUM
AND [7760 /CAN'T BE GREATER THAN 17 OCTAL
SZA CLA
JMP I [NUMBIG
TAD I (7203 /MAKE SURE IT'S A SERIAL HANDLER
TAD (-2423
SZA CLA
JMP I [NOTSER /SORRY, WRONG ONE
TAD NUM
DCA I (7204
JMP I STBAUD
TTYTBL, CODE;NOTV4 //NOT AVAILABLE IN VERSION 4
ALT;NOTV4
LC;NOTV4
TAB;NOTV4
FILL;NOTV4
FLAGG;NOTV4
CTRL;NOTV4
DELAY;NOTV4
AROW;NOTV4
SCOPP;TTSCOP //FOR TTY ONLY
COL;TTCOL
SERTBL, WIDTH;TTWIDTH //SERIAL HANDLERS AND TTY COMMON LIST
ECHO;TTECHO
PAYGE;TTPAGE
PAUS;TTPAUS
HGHT;TTHGHT
ESC;TTESC
0
PAGE
TTWIDTH,0
JMS GETWID
JMS TTST1
TAD NUM
AND [7
SZA CLA
JMP I [BADWID
TAD NUM
TAD [-200
SNA CLA
JMP I [BADWID
TAD NUM
CIA
DCA I (HNDLBF+SWIDTH
TAD I (HNDLBF+SWIDTH
DCA I (HNDLBF+RWIDTH
JMP I TTWIDTH
SWIDTH= 0237 //LOCATION IN VA0 SERIAL HANDLERS
RWIDTH= 0240
GETWID, 0
TAD NO
SZA CLA
JMP I [SYNTAX
JMS OPTEQ
JMS I [NUMBER
SNA
JMP I (BADWID
DCA NUM
TAD FLG
SZA CLA
JMP I [SYNTAX /NO DIGITS
TAD NUM
AND [7400
SZA CLA
JMP I [NUMBIG
JMP I GETWID
TTST1, 0
JMS I (ASRTST
TAD VNO
JMS I [BRANCH
-1;OLDERR
-2;OLDERR
-3;OLDERR
-4;OLDERR /V3C
-5;OLDERR /V3D
-6;OLDERR /OS78 V3.0-SET 6A
-260;TTOK /TTY VER FOR OS278 IS B0
0
JMP I [NEWERR
TTOK, JMP I TTST1
OPTEQ, 0
JMS I [GETC
TAD (-"=
SZA CLA
JMP I OPTEQ
STA /V3D
JMS I [SPACE
JMS I [GETC /ADVANCE OVER =
CLA
JMP I OPTEQ
PAGE
OPRIN, 0
DCA N3
TAD (-4
DCA OKNT
OPLP, TAD N3
RTL
RTL
AND [7
TAD [60
JMS I [TYPE
TAD N3
RTL
RAL
DCA N3
ISZ OKNT
JMP OPLP
JMP I OPRIN
OKNT, 0
N3, 0
GTEM, 0
SRCH, 0
TAD I SRCH
ISZ SRCH
TAD (HNDLBF-1
DCA XR1 /SET UP POINTER TO LOCATION TO START SEARCHING
TAD I SRCH
ISZ SRCH
CIA
DCA CNT /SET UP COUNTER
TAD I SRCH
CIA
DCA TEMP /VALUE TO SEARCH FOR
ISZ SRCH
SRLUP, TAD I XR1
TAD TEMP
SNA CLA
JMP SRFND
ISZ CNT
JMP SRLUP
JMP I SRCH
SRFND, ISZ SRCH
TAD XR1
JMP I SRCH
GENCMN, 0
TAD NO
SZA CLA
JMP I [SYNTAX
JMS I [ONUM
DCA NUM2
TAD FLG
SZA CLA
JMP I [SYNTAX
JMS I [GETC
DCA TEMP
TAD TEMP
SNA
JMP I GENCMN
TAD (-"=
SZA
TAD ("=-",
SZA CLA
JMP I [SYNTAX
JMP I GENCMN
GENLOC, 0
JMS GENCMN
TAD DHI
SPA CLA
TAD [-200
TAD [-200
CLL
TAD NUM2
SZL CLA
JMP I [NUMBIG
TAD NUM2
TAD (HNDLBF /BASE OF HANDLER
DCA NUM2
TAD TEMP
SNA CLA
JMS ODT
GETNEW, JMS I [ONUM
DCA NUM
TAD FLG
SZA CLA
JMP I GENLOC
JMS I [GETC
SZA CLA
JMP I [SYNTAX
TAD NUM
DCA I NUM2
JMP I GENLOC
ODT, 0
TAD I NUM2
JMS OPRIN
TAD ("/
JMS I [TYPE
TAD I [READ
DCA GTEM /SAVE CHAIN STATUS
JMS I [READ
TAD [LINBUF
DCA LINPTR
TAD GTEM
DCA I [READ
JMP I ODT
OLDBAS, JMS I [PRINT
TEXT "? OLD BASIC"
JMP I [GOAWAY
SVERSION,JMS I (PRINT
TEXT "VERSION ??" //OS78 V4
*.-2
VERSION
*.+1
JMP I [GOAWAY
PAGE
MTAPAR, 0
TAD NO
SZA CLA
JMP I [SYNTAX
JMS MTST1
TAD LINPTR
DCA SAVPTR
TAD (EVEN
JMS I [KEYSRCH
SKP
JMP SETE
TAD SAVPTR
DCA LINPTR
TAD (ODD
JMS I [KEYSRCH
JMP I [SYNTAX
TAD (400
SETE, TAD (2
DCA I (HNDLBF
JMP I MTAPAR
MTST1, 0
TAD VNO
JMS I [BRANCH
-1;OLDERR
-2;OLDERR
-3;OLDERR
-4;MTOK
-5;MTOK
-6;MTOK
ZBLOCK 4
0
JMP I [NEWERR
MTOK, JMP I MTST1
MTADEN, 0
JMS MTST1
TAD NO
SZA CLA
JMP I [SYNTAX
JMP I [NOTIMP
JMP I MTADEN
MTAFIL, 0
JMS MTST1
TAD NO
CIA /V3D
IAC /V3D
DCA I (7201
JMP I MTAFIL
BADCOD, JMS I [PRINT
TEXT "? UNKNOWN CARD CODE"
JMP I [GOAWAY
/SUPPOSED TO WORK ON ALL VERSIONS
CDCODE, 0
TAD NO
SZA CLA
JMP I [SYNTAX
JMS I (OPTEQ
JMS I [NUMBER
TAD (-32 /026
SNA
JMP C026
TAD (32-35 /029
SZA CLA
JMP BADCOD
JMS CHANGE
LIST1;LIST2
JMP I CDCODE
C026, JMS CHANGE
LIST1;LIST3
JMP I CDCODE
GET, 0
KSF
JMP .-1
KRB
AND [177
TAD [200 /FORCE TO 8-BIT
JMP I GET
CHANGE, 0
TAD I CHANGE
DCA P1
ISZ CHANGE
TAD I CHANGE
DCA P2
ISZ CHANGE
CHLUP, TAD I P1
SNA
JMP I CHANGE
TAD (HNDLBF /BASE OF HANDLER
DCA P3
TAD I P2
DCA I P3
ISZ P1
ISZ P2
JMP CHLUP
P1, 0
P2, 0
P3, 0
PAGE
/FIXED FOR V3D:
LIST1, 104;105;106
114;115;116
124;125;126;127
134;135;136
0
LIST2, 3203;4007;3502
7514;0577;3637
0104;1211;3374;0641
7316;3410;1376
LIST3, 7735;4076;0774
3314;1002;0305
3204;1273;3606;1341
3716;1175;3401
TECNAM, FILENAME TECO.SV
TECO, 0
DCA SA
TAD (TECNAM
JMS LOOKUP
JMP I TECO /NOT THERE
DCA BLKN
JMS I (SHNDLR
100 /READ 1 PAGE FROM TECO
7000 /BUFFER
BLKN, 0
JMP I [SYSERR
TAD BLKN
DCA BLKN2
TAD SA
DCA I (7002 /REL LOC 2 IS S.A.
JMS I (SHNDLR
4100
7000
BLKN2, 0
JMP I [SYSERR
JMP I TECO
SA, 0
LOOKUP, 0
DCA ARG1 /PTR TO FILENAME IN AC
CLA IAC /LOOKUP ON SYS
CIF 10
JMS I USR
2
ARG1, 0 /STARTING BLOCK
0
JMP I LOOKUP /NOT FOUND
TAD ARG1
ISZ LOOKUP
JMP I LOOKUP /RETURN 2 WITH BLOCK # IN AC
GENDVC, 0
TAD NO
SZA CLA
JMP I [SYNTAX
JMS I [ONUM
SNA
JMP I [SYNTAX
DCA NUCODE
TAD NUCODE
AND [7700
SZA CLA
JMP I (NUMBIG
TAD NUCODE
TAD (-30
SPA CLA
JMP I [NUMBIG
TAD NUCODE
CLL RTL
RAL
DCA NUCODE
TAD (HNDLBF
DCA RR
DVLUP, JMS I (GETIOT
JMP I GENDVC
TAD (-30
SPA CLA
JMP DVLUP
TAD I RR
AND (7007
TAD NUCODE
DCA I RR
JMP DVLUP
CDRTBL, CODE;CDCODE
ZBLOCK 4
0
PAGE
/ 6600 IS THE BEGINNING OF THE AUXBUF
/ FOR THE SET COMMAND. HOWEVER, WE CAN USE THAT SPACE TO
/ PERFORM FUNCTIONS PRIOR TO REFERENCING THE BUFFER.
/ THE FOLLOWING ROUTINES, LOCATED IN WHAT IS NORMALLY
/ BUFFER SPACE, ARE UTILIZED BEFORE THE BUFFER SPACE IS NEEDED.
*6600
HANTES, 0 /TEST FOR SET HANDLER INPUT
TAD I LINPTR
TAD (-240 /TEST FOR REGULAR SET COMMAND
SNA /SPACE INDICATES NORMAL COMMAND
JMP I HANTES
TAD (240-272 /COLON INDICATES THE SAME
SNA CLA
JMP I HANTES
JMP I (SEHAN /OTHERWISE BRANCH TO SET HANDLER
/
/ THE FOLLOWING CODE IS USED BY THE SET HANDLER XXXX<XXXX
/ CALL FORMAT. IT IS SAFE IN THE AUXBUF AREA FOR THE SIMPLE
/ REASON THAT SET HANDLER NEVER USES AUXBUF.
GETTOO, 0 /CALLED IN ORDER TO ACCESS GETTWO
JMS CHKP /CHECK FOR A PERIOD
JMS I (GETTWO
CIF CDF 10
JMP I GETTOO
CHKP, 0
JMS I (ALPHA /TEST FOR LETTER OR DIGIT
JMP TSTP /IF NOT, LETTER OR DIGIT...
CLA
JMS I (BACKC /IF LETTER OR DIGIT, RESTORE POINTER
JMP I CHKP /RETURN
TSTP, TAD (-256 /IS IT A PERIOD?
SZA CLA
JMP SPIN /IF NOT, PUT IN SPACE
TAD (3 /IF SO, BUMP POINTER 3 LOCATIONS
TAD LINPTR /IN ORDER TO PASS BY EXTENSION
DCA LINPTR
SPIN, JMS I (BACKC /MOVE POINTER BACK
TAD (240
DCA I LINPTR /REMOVE POSSIBLE <
JMP I CHKP
PAGE
/7000-7177 IS NORMALLY THE BUFFER FOR THE TECO CCB
/WE CAN USE IT FOR SET HANDLER WITH NO ILL EFFECTS
*7000
F0ERR, JMS I [CRLF
JMS I [PRINT
TEXT "I/O READ ERROR"
JMP I [GOAWAY
F0ERR1, JMS I [CRLF
JMS I [PRINT
TEXT " I/O WRITE ERROR"
JMP I [GOAWAY
F0ERR2, JMS I [CRLF
JMS I [PRINT
HNMESG, TEXT " -- NOT FOUND ON SYS: "
JMP I [GOAWAY
F0ERR3, JMS I [CRLF
JMS I [PRINT
TEXT "OLD HANDLER NOT FOUND IN MONITOR"
JMP I [GOAWAY
F0ERR4, JMS I [CRLF
JMS I [PRINT
TEXT "CAN'T - HANDLER ALREADY RESIDENT"
JMP I [GOAWAY
F0ERR5, JMS I [CRLF
JMS I [PRINT
TEXT "CAN'T - TOO MANY LOGICAL DEVICES"
JMP I [GOAWAY
NOTSER, JMS I [PRINT
TEXT "? CAN'T, NOT SERIAL"
JMP I [GOAWAY
PAGE
/ 7200-7577 BUFFER FOR HANDLER, WE CAN USE
/ IT FOR SET HANDLER CODE ...
*HNDLBF
PRHED, 0 //CHECK FOR VT TYPE & CLEAR THE SCREEN.
CDF 10
TAD I (7726
CDF 0
AND (200
SNA CLA
JMP PRHED9 //NO SCOPE
TAD I (7771 //WHERE OS78 & OS278 BITS LIVE IN MONITOR
AND (4
SZA CLA
TAD (VT278P-VT52P //VT278
TAD (VT52P //VT52 TYPE
DCA HDPTR //LOCAL
TAD I HDPTR
SNA
JMP PRHED9 //SCREEN IS ZAPPED--DO THE TEXT PART.
JMS I [TYPE
ISZ HDPTR
JMP .-5 //KEEP ON TRUCKIN'
PRHED9, JMS I (PRHED1 //PRINT HEADER
CIF CDF 10
JMP I PRHED
//"[&77 WILL BUILD A 33 FOR ESCAPE CHAR
VT278P, "[&77;"[;"H;"[&77;"[;"J;0
VT52P, "[&77;"H;"[&77;"J;0
HDPTR, 0
PAGE
PRHED1, 0
JMS I [CRLF
JMS I [PRINT //PRINT HEADER FOR DEVICES TO BE LISTED.
TEXT /USE "SET HANDLER OLD NEW" TO CHANGE THESE DEVICES:/
JMS I [CRLF
JMS I [PRINT
TEXT "DEVICE NAME LOGICAL DEVICE(S)"
JMS I [PRINT
TEXT "___________ _________________"
JMS I [CRLF
JMP I PRHED1
FIELD 0
*200
PAGE
IFNZRO MACREL <.ASECT HANSET
>
FIELD 1
*2000
/THIS IS THE CODE ADDED TO RESOLVE THE OVER ABUNDANCE OF
/HANDLERS NECESSARY TO ACCOMMODATE OS78 USERS...
BUFHN=3200 /BUFFER AREA
HSET,
JMS I (7700
10 /LOCK IN USR
JMS I (LOPT /TEST FOR L OPTION
CIF CDF 0
JMS I (SPACE1 /USE FIELD ZERO SPACE SUBROUTINE
JMS I (LOPT /TEST AGAIN
CDF 10 /RESET DATA FIELD TO 1 --- CHANGED BY LOPT
JMS LODEGR /READ IN GROUP TO BE REPLACED
JMS I (REPLGR /GO GET THE PERTINENT INFO FROM GROUP 1
CIF CDF 0 /
JMS I (GETTOO
CLA
CIF CDF 0
JMS I (SPACE1 /JUMP OVER SPACES
TAD (NAME /SET HANDLER LOAD NAME POINTER
DCA STBLK
JMS LODEGR /READ IN GROUP TWO
JMS I (NEWGR /DO THE HANDLER TABLE SWITCH
JMS I (LODBLK /LOAD THE HANDLER ONTO SYSTEM
JMS I (USRLD /SET USR TABLES ON SYS
JMS I (BLK66 /SET DCB, ETC. ON SYS
CIF CDF 0
JMP I (DONE /EXIT ROUTINE
LODEGR, 0 //ROUTINE TO READ IN HANDLER FILE
CIF CDF 0 /
JMS I (GETTOO /GET FIRST TWO CHARACTERS OF THE NAME
DCA NAME /STORED IN SIX-PACK
CIF CDF 0 /
JMS I (GETTOO /GET SECOND TWO
DCA I (NAME+1 /
CIF CDF 0
JMS I (GETTOO /ANY MORE CHARACTERS...
DCA I (NAME+2
JMS LODE /READ IN THE HANDLER FILE
JMP I LODEGR
LODE, 0 //ROUTINE TO LOAD HANDLER FILE
CLA
TAD (1 /ADD IN DEVICE NUMBER
JMS I (200 /FOR USR CALL
2 /LOOKUP FILE
STBLK, NAME /POINTER TO FILENAME
0
JMP F1ERR2 /
TAD STBLK /STARTING BLOCK OF FILE
IAC /SKIP BY CCB
DCA NBLK /STORE IT FOR READ
CDF 10
CIF 0
JMS I (SHNDLR /CALL SYS HANDLER
0610 /READ SIX PAGES INTO FIELD 1
STLOC, BUFHN /INTO HANDLER BUFFER
NBLK, 0 /FROM THIS BLOCK ON SYS DEVICE
JMP F1ERR
JMP I LODE
F1ERR, CIF CDF 0
JMP I (F0ERR /READ ERROR
F1ERR1, CIF CDF 0
JMP I (F0ERR1 /WRITE ERROR
F1ERR2,
TAD I NMEPR /MOVE NAME INTO ERROR MESSAGE
SNA /IS THIS WORD USED?
JMP OVNOUT /EMPTY
AND (77 /SECOND LETTER ZERO?
SNA CLA
TAD (40 /IF SO, MAKE IT A SPACE
TAD I NMEPR
CDF 0
DCA I NMSG
CDF 10
ISZ NMSG /BUMP POINTERS
ISZ NMEPR
ISZ NKNT /ALL DONE?
JMP F1ERR2 /NOT YET
OVNOUT, CDF 0
TAD (5610 /MOVE IN THE .HN
DCA I NMSG
ISZ NMSG
TAD (1640
DCA I NMSG
CIF CDF 0
JMP I (F0ERR2 /XXXXXX.HN NOT FOUND ON SYS:
LODBLK, 0 //LOADS NEW HANDLER INTO SYSTEM AREA
CDF 10
CIF 0
JMS I (SHNDLR //V4 - CHANGED TO WRITE ONLY TWO PAGES
4210 /TWO PAGES FROM FIELD 1
3400
SYSBLK, 0 /BLOCK TO WRITE TO
JMP I (F1ERR1
JMP I LODBLK
F1LNPR, 0
NKNT, -3
NMSG, HNMESG
NMEPR, NAME
NAME, FILENAME .HN
PAGE
*2200
REPLGR, 0 //ACCESSES INFO ABOUT PERMANENT DEVICE NAMES
REPEAT, JMS I (ADJNM /ADJUST THE DEVICE NAME
DCA I (X1T /ZERO OFFSET
TAD HTMP /ADD IN NAME
CIA
DCA HTMP /STORE FOR TESTING
TAD I PDNT /POINTER TO PDNT STORED IN 10036
DCA HTMP1 /
HLOOP, ISZ HTMP1 /BUMP POINTER TO TABLE
TAD I HTMP1 /GET THE ENTRY
TAD HTMP /IS IT THE ONE WE WANT?
SNA CLA
JMP FOUND1 /IT IS HERE!
ISZ KNTR /FINISHED WITH TABLE?
JMP HLOOP
JMP I (TSTERR /IF SO, TEST FOR NO ROOM FOR SECOND ENTRY
FOUND1, ISZ I (PRTST /IS THIS THE NEW HANDLER?
SKP
JMP I (F1ERR4 /IF SO IT'S AN ERROR
TAD I PDNT /ADD THE STARTING POINT OF THE PDNT
CIA
TAD HTMP1 /SUBTRACT IT FROM POINTER
ISZ TESTO /IS THAT THE FIRST OR SECOND ENTRY ?
JMP SECND
DCA OFST1 /STORE THE FIRST OFFSET POINT
TAD I PDHIT /GET THE START OF DHIT
TAD OFST1 /ADD OFFSET IN TO TABLE
DCA HTMP1
TAD I HTMP1 /POINT TO DHIT ENTRY
AND (3600 /SAVE THE RELATIVE BLOCK LOCATION
DCA BLKSL
TAD BLKSL
CLL RAR
BSW /RE-POSITION BLOCK NO. TO COMPUTE REAL BLOCK
TAD (15
DCA I (SYSBLK /ALSO SAVE THE REAL BLOCK LOCATION
ISZ I (BUFHN /WERE THERE TWO ENTRY POINTS?
JMP TWO
TAD I PDNT /NO, PASS BY SYS AND DSK AND LOOK FOR ZERO...
DCA HTMP1
TAD (-16
DCA KNTR /RESET COUNTER
DCA HTMP /SET DESIRED ENTRY VALUE TO ZERO
JMP HLOOP
TWO, TAD (-16 /RESET COUNTER
DCA KNTR
TAD (10
DCA I (X1T /SET TO POINT TO SECOND DEVICE NAME
JMP REPEAT
SECND, DCA OFST2 /SAVE OFSET FOR SECOND HANDLER SLOT
DCA I HTMP1 /SET SECOND HANDLER ENTRY TO ZERO
REPTUR, JMP I REPLGR /TIME TO RETURN
PDHIT, 37 /POINTER TO DEVICE HANDLER INFO TABLE
BLKSL, 0
HTMP, 0
HTMP1, 0
TESTO, -1
KNTR, -16
OFST1, 0
OFST2, 0
NEWGR, 0 //RESETS THE DEVICE HANDLER TABLES
JMS I (PRESNT /TEST TO SEE IF HANDLER ALREADY PRESENT
SECRPT, JMS I (PDEVNM /SET UP PERMANENT DEVICE NAME
TAD I PDNT /POINTER TO PERMANENT DEVICE HANDLER TABLE
TAD OFST1 /OFFSET INTO TABLE
DCA HTMP1 /STORE FOR LOAD
OVER, TAD HTMP
DCA I HTMP1 /STORE THE PERMANENT DEVICE NAME
//LOAD DEVICE CONTROL WORD TABLE
TAD (7760 /START OF TABLE
TAD OFST1 /OFFSET
DCA HTMP1
TAD I NDATA /ADD IN INFO FROM HANDLER HEADER
DCA I HTMP1 /STORE IN DCWT
//LOAD DEVICE HANDLER INFORMATION TABLE
TAD I PDHIT /POINTER TO TABLE
TAD OFST1 /OFFSET
DCA HTMP1
ISZ NDATA /BUMP POINTER TO DHIT DATA
TAD I NDATA
TAD BLKSL /RELATIVE BLOCK ON SYS
DCA I HTMP1
//ZERO DEVICE HANDLER RESIDENCY TABLE
TAD (7647 /START OF DHRT
TAD OFST1
DCA HTMP1
DCA I HTMP1 /ZEROED
JMS I (DONE1
JMP I NEWGR
USRLD, 0 //ADDS HANDLER(S) INFO TO SYS
CDF 10
CIF 0
JMS I (SHNDLR
0610 /READ 3 BLOCKS FROM SYS
BUFHN /INTO BUFHN
13 /FROM USR AREA ON SYS
JMP I (F1ERR /ERROR RETURN
TAD I PDNT /FIRST MOVE DEVICE NAMES
JMS I (MOVE
TAD I PDHIT /THEN, THE INFO TABLE
JMS I (MOVE
CDF 10
CIF 0
JMS I (SHNDLR /RE-WRITE USR
4410
BUFHN+400
14
JMP I (F1ERR1
JMP I USRLD
PDNT, 36 /POINTER TO PERMANENT DEVICE NAME TABLE
NDATA, 0
PAGE
*2400
BLK66, 0 //LOAD DCW TABLE ON SYS
CDF 10
CIF 0
JMS I (SHNDLR /READ IN BLOCK 66
0210 /
BUFHN /INTO BUFFER
66
JMP I (F1ERR
TAD (200 /SET TO PROPERLY ACCESS BLOCK 66 THRU MOVE
DCA MVADD
TAD (7760 /ADD POINTER TO DCWT
JMS MOVE /MOVE TABLE
CDF 10
CIF 0
JMS I (SHNDLR /RE-WRITE BLOCK 66
4210
BUFHN
66
JMP I (F1ERR1
JMP I BLK66
MOVE, 0 //CODE MOVING SUBROUTINE
DCA MTMP /STORE POINTER TO CODE TO BE MOVED
LOPE, TAD MTMP /SET UP STORAGE LOCATION
TAD (BUFHN
TAD MVADD /BLOCK 66 ADJUSTMENT
DCA DEPLOC /
TAD I MTMP /MOVE DATA
DCA I DEPLOC /TO HERE
ISZ MTMP /BUMP POINTER
ISZ KNT /ALL DONE??
JMP LOPE /IF NOT, LOOP
TAD (-17 /RESET COUNTER
DCA KNT
JMP I MOVE
DONE1, 0
ISZ TEST1 /HAVE BOTH HANDLERS BEEN LOADED?
JMP I DONE1 /YES, RETURN
ISZ I (BUFHN /ARE THERE TWO HANDLERS?
SKP
JMP I DONE1 /ONLY ONE HANDLER
TAD (10 /2ND HANDLER IS TEN LOC. FROM START OF BUFFER
DCA I (X1T
TAD I (OFST2 /ADD SECOND OFFSET
DCA I (OFST1 /STORE FOR ROUTINE
JMP I (SECRPT /REPEAT
PDEVNM, 0 //SET UP WORD FOR PDNT
TAD TEST1 /FIRST, TEST FOR PROPER # OF ENTRY POINTS
SZA CLA /IF ZERO ONLY ONE
JMP CONT /CONTINUE NORMALLY
IAC
TAD I (BUFHN /IF MORE THAN ONE, ERROR
SZA CLA
JMP F1ERR5
CONT, JMS I (ADJNM /ADJUST NAME OF ENTRY
IAC /SET UP POINTER FOR NEW DATA
TAD I (X1T
DCA I (NDATA
DCA I (X1T /ZERO OFFSET
JMP I PDEVNM
TSTERR, ISZ PRTST /IS THIS THE NEW HANDLER ??
SKP
JMP I PRESNT /IF SO, WE DIDN'T REALLY WANT TO FIND IT
TAD I (HTMP /SEE IF ENTRY POINT SEARCHED FOR WAS ZERO
SZA CLA
JMP F1ERR3 /IF NOT, HANDLER NOT FOUND
ISZ TEST1 /SET TEST1 TO ALLOW FOR ONLY ONE HANDLER
NOP
JMP I (REPTUR /RETURN
PRESNT, 0 //ROUTINE TO AID IN TESTING PRESENCE OF HANDLER
STA
DCA PRTST /SET TEST INDICATOR
TAD (-16 /RESET COUNTER
DCA I (KNTR
JMS I (REPLGR /GO SEARCH TABLE
JMP I PRESNT
F1ERR3, CIF CDF 0
JMP I (F0ERR3 /OLD HANDLER NOT FOUND ON SYS:
F1ERR4, JMS I (LPTHND //IF LPT HANDLER, LET THE CHANGE HAPPEN
JMP I PRESNT
RERR4, CIF CDF 0
JMP I (F0ERR4 /HANDLER ALREADY PRESENT
F1ERR5, CIF CDF 0
JMP I (F0ERR5 /TOO MANY HANDLERS
PRTST, 0
TEST1, -1
KNT, -17
MVADD, 0
DEPLOC, 0
MTMP, 0
PAGE
*2600
ADJNM, 0 //ROUTINE TO AJUST DEVICE NAME TO LOOK LIKE TABLE ENTRY
TAD X1T /ADD IN OFFSET FOR FIRST OR SECOND ENTRY POINT
TAD (BUFHN+3 /ADD IN OFFSET TO NAME
DCA X2T /STORE IT TEMPORARILY
TAD X2T
IAC /POINTER TO OSECOND HALF OF NAME
DCA X1T /LIKEWISE, STORE SECOND WORD
TAD I X2T
TAD I X1T
DCA I (HTMP /STORE THE PERMANENT DEVICE NAME
TAD I X1T /IS SECOND WORD NON-ZERO?
SNA CLA
JMP I ADJNM /RETURN
TAD I (HTMP /IF NON ZERO, SET ZERO BIT
RAL
STL RAR
DCA I (HTMP
JMP I ADJNM
LOPT, 0 /DOES LINPTR CONTAIN /L?
CDF 0
TAD I (LINPTR
DCA F1LP2 /ACCESS POINTER INTO LINE BUFFER
TAD I F1LP2
TAD (-"/
SZA CLA /IS THERE AN OPTION?
JMP I LOPT /NO, SO RETURN
ISZ F1LP2 /BUMP POINTER
TAD I F1LP2 /IS THERE AN L FOLLOWING?
TAD (-"L
SZA CLA
JMP I LOPT /IF NO, RETURN
CIF CDF 0
JMS I (PRHED /PRINT THE HEADER
JMS I (SRNT /SEARCH THE NAME LIST
JMS I (PRLIS /PRINT THE LIST
CIF CDF 0
JMP I (GOAWAY
TSTTBL, 0 //SEARCH HANDLER NAME TABLE.
DCA WEWNT /STORE DEVICE NAME WE'RE SEARCHING FOR
TAD I PTNAM /GET NUMBER OF ENTRIES IN TABLE(NEGATIVE)
DCA TBLCNT /STORE AS COUUNTER
ISZ PTNAM /POINT TO DEVICE NAME
SECDT, TAD WEWNT /LOOK FOR NAME
TAD I PTNAM /IS THIS IT?
SNA CLA
JMP I (LPTCHK /YES GO STORE INFO
ISZ PTNAM /NO, BUMP POINTER
ISZ PTNAM /ADVANCE PAST GROUP INFO
ISZ TBLCNT /HAVE WE TESTED ALL THE GROUPS
JMP SECDT /NOT YET...
RESTPR, TAD (GTABL /RESET TABLE POINTER
DCA PTNAM
JMP I TSTTBL /GO GET NEXT NAME
PTNAM, GTABL
WEWNT, 0
TBLCNT, 0
X1T, 0
X2T, 0
F1LP2, 0
/SEE IF LPT HANDLER, YES RETURN CALL+1; NO CALL+2
LPTHND, 0
TAD I (HTMP
TAD (4020
SZA CLA /LPT HANDLER
ISZ LPTHND /NOT AN LPT HANDLER
JMP I LPTHND
PAGE
*3000
SRNT, 0
TAD I (PDNT /GET POINTER TO TABLE
DCA INFOT
TAD I INFOT
DCA INFOT /NOW CONTAINS TABLE START
SRLOOP, TAD I INFOT /GET TABLE ENTRY
JMS I (TSTTBL /GET CORR. HANDLER NAME...
ISZ INFOT
ISZ INCNT /ARE WE THRU TABLE?
JMP SRLOOP /
JMP I SRNT
SETFND, IAC
TAD I (PTNAM /BUMP POINTER AND STORE
DCA NPTNAM
TAD I NPTNAM /ACCESS JMS INF0
ISZ PRPNT //BUMP POINTER
DCA I PRPNT /STORE IN FOR PRINTING
ISZ PRPNT /ADVANCE TO NEXT SPOT
JMP I (RESTPR /RETURN TO RESTORE TABLE POINTER
PRLIS, 0 //THIS ROUTINE ALLOWS US TO PRINT LIST
//IT IS FILLED BY SETFND...
TAD (CIF 10 /SET PRINT RETURN TO FIELD ONE
CDF 0
DCA I (PRCDF /STORE IT
CDF 10
PRSTRT, JMS I .+1 /START PRINTING LIST
PREND
JMS I .+1
PREND
JMS I .+1
PREND
JMS I .+1
PREND
JMS I .+1
PREND
JMS I .+1
PREND
JMS I .+1
PREND
JMS I .+1
PREND
JMS I .+1
PREND
JMS I .+1
PREND
JMS I .+1
PREND
JMS I .+1
PREND
JMS I .+1
PREND
JMS I .+1
PREND
JMS I .+1
PREND
JMP I PRLIS /END OF TABLE, MAX 17 OCTAL ENTRIES
PREND, 0
JMP I PRLIS
NPTNAM, 0
PRPNT, PRSTRT
INCNT, -16
INFOT, 0
PAGE
*3200
/ 3200-4377 IS THE BUFFER FOR NORMAL HANDLER PROCEDURES
/ HOWEVER, THE LIST OPTION ALLOWS US TO USE IT WITHOUT ANY
/ CONFLICT.
/ GTABL CONTAINS TWO WORD GROUPS OF INFORMATION
/ CONCERNING EACH POSSIBLE HANDLER GROUP. TSTTBL
/ SEARCHES FOR THE STORED VALUE OF THE DEVICE NAME.
/ IF FOUND IT THEN STORES THE
/ NAME PRINTING INFO.
GTABL, -GHALF //DEVICES THIS TABLE RECOGNIZES
GBEGIN=.
-6601;PBAT /BAT
LPTID, -4020;PLPT /LPT
-7421;PLQP /LQP
-4510;PRX2A /RX2A (RX20,RX21)
-4512;PRX2B /RX2B (RX22,RX23)
-5010;PRX5A /RX5A (RX50:RX50,RX51)
-5012;PRX5B /RX5B (RX50:RX52,RX53)
-4764;PRD5A /RD5A (RD51:RD50,RD51)
-4766;PRD5B /RD5B (RD51:RD52,RD53)
-4215;PRL0 /RL0 (RL0A,RL0B)
-4315;PRL1 /RL1 (RL1A,RL1B)
-4217;PRLC /RLC (RL0C,RL1C)
-5076;PSLU2 /SLU2
-5077;PSLU3 /SLU3
-5376;PVLU2 /VLU2
-5377;PVLU3 /VLU3
-4263;RL02D1 //R0AB R20A,R20B
-4265;RL02D2 //R0CD
-4363;RL02D3 //R1AB
-4365;RL02D4 //R1CD
-4267;RL02D5 //R01E
-6077;PCOM0 //COM0 DECmate 1
-6100;PCOM1 //COM1
-6034;PCOMM //COMM DECmate 2
/-4631;PSYS //SYSTEM
/-5723;PDSK //DISK
/-5524;PTTY //TTY
GEND=.
GENTRY=GEND-GBEGIN
GHALF=GENTRY%2
/CHECK FOR LPT, IF SO SEE IF PARALLEL OR SERIAL
LPTCHK, TAD I (PTNAM
DCA LPCHK
TAD I LPCHK
TAD (4020 /IS STORED NAME LPT?
SZA CLA
JMP I (SETFND /IS NOT STORE INFO
JMS I USR1 /IF=1; DF=1
1 /FETCH
DEVICE LPT
HNDLBF+1 /LOAD INTO LOC. 7200-7577 FIELD 0
JMP I (F1ERR3
CDF 0
TAD I (7203 /CHECK ID FOR SERIAL
CDF 10
TAD (-2423
SZA
JMP LA34 /SEE, IF LA34
TAD (LPTSE /SERIAL
DCA I (LPTID+1 /KLUGE THE MESSAGE POINTER
JMP I (SETFND /AND STORE THE INFO
LA34, TAD (2423-6364
SZA CLA
JMP I (SETFND /WAS PARALLEL, STORE INFO AS IS
TAD (LPT34
DCA I (LPTID+1 /KLUGE THE MESSAGE POINTER
JMP I (SETFND /AND STORE THE INFO
LPCHK, 0
USR1, 200
IFDEF FORDEV <
PSYS, 0 //SYS:
CIF 0
JMS I (PRINT
TEXT "(SYS:)"
ISZ PSYS
JMP I PSYS
PDSK, 0 //DISK
CIF 0
JMS I (PRINT
TEXT "(DSK:)"
ISZ PDSK
JMP I PDSK
>
IFDEF FORDEV <
PTTY, 0
CIF 0
JMS I (PRINT
TEXT " (TTY:)"
ISZ PTTY
JMP I PTTY
>
LPTSE, 0 //VT278'S SERIAL VERSION OF LPT (IOT'S 32-33)
CIF 0
JMS I (PRINT
TEXT "LPTS LPT (SERIAL)"
ISZ LPTSE
JMP I LPTSE
*3400
/ NORMALLY USED AS SET HANDLER BUFFER, LIST OPTION
/ CAN USE THIS SPACE.
PRX2A, 0
CIF 0
JMS I (PRINT
TEXT "RX2A RX20,RX21 (RX02)"
ISZ PRX2A
JMP I PRX2A
PRX2B, 0
CIF 0
JMS I (PRINT
TEXT "RX2B RX22,RX23 (RX02)"
ISZ PRX2B
JMP I PRX2B
PRL0, 0
CIF 0
JMS I (PRINT
TEXT "RL0 RL0A,RL0B (RL01)"
ISZ PRL0
JMP I PRL0
PRL1, 0
CIF 0
JMS I (PRINT
TEXT "RL1 RL1A,RL1B (RL01)"
ISZ PRL1
JMP I PRL1
PRLC, 0
CIF 0
JMS I (PRINT
TEXT "RLC RL0C,RL1C (RL01)"
ISZ PRLC
JMP I PRLC
*3600
/ 3600 IS BUFFER FOR NORMAL HANDLER OPERATION
/ USING IT HERE FOR LISTING CAUSES NO CONFLICT
PLPT, 0
CIF 0
JMS I (PRINT
TEXT "LPSV LPT (PARALLEL)"
ISZ PLPT
JMP I PLPT
PSLU2, 0
CIF 0
JMS I (PRINT
TEXT "SLU2 SLU2"
ISZ PSLU2
JMP I PSLU2
PBAT, 0
CIF 0
JMS I (PRINT
TEXT "BAT BAT"
ISZ PBAT
JMP I PBAT
PLQP, 0
CIF 0
JMS I (PRINT
TEXT "LQP LQP (PARALLEL)"
ISZ PLQP
JMP I PLQP
*4000
/ 4000 NORMALLY USED AS BUFFER FOR SET HANDLER WE CAN US IT FOR
/ LISTING...
PSLU3, 0
CIF 0
JMS I (PRINT
TEXT "SLU3 SLU3"
ISZ PSLU3
JMP I PSLU3
PVLU2, 0
CIF 0
JMS I (PRINT
TEXT "VLU2 VLU2"
ISZ PVLU2
JMP I PVLU2
PVLU3, 0
CIF 0
JMS I (PRINT
TEXT "VLU3 VLU3"
ISZ PVLU3
JMP I PVLU3
PRD5A, 0
CIF 0
JMS I (PRINT
TEXT "RD5A RD50,RD51 (RD51)
ISZ PRD5A
JMP I PRD5A
PRD5B, 0
CIF 0
JMS I (PRINT
TEXT "RD5B RD52,RD53 (RD51)
ISZ PRD5B
JMP I PRD5B
*4200
/ 4200 NORMALLY USED AS BUFFER FOR SET HANDLER WE CAN US IT FOR
/ LISTING...
//NEW FOR V4:
RL02D1, 0
CIF 0
JMS I (PRINT
TEXT "R0AB R20A,R20B (RL02)"
ISZ RL02D1
JMP I RL02D1
RL02D2, 0
CIF 0
JMS I (PRINT
TEXT "R0CD R20C,R20D (RL02)"
ISZ RL02D2
JMP I RL02D2
RL02D3, 0
CIF 0
JMS I (PRINT
TEXT "R1AB R21A,R21B (RL02)"
ISZ RL02D3
JMP I RL02D3
RL02D4, 0
CIF 0
JMS I (PRINT
TEXT "R1CD R21C,R21D (RL02)"
ISZ RL02D4
JMP I RL02D4
RL02D5, 0
CIF 0
JMS I (PRINT
TEXT "R01E R20E,R21E (RL02)"
ISZ RL02D5
JMP I RL02D5
*4400
/ 4400 NORMALLY USED AS BUFFER FOR SET HANDLER WE CAN US IT FOR
/ LISTING...
PCOM0, 0
CIF 0
JMS I (PRINT
TEXT "COM0 COM0"
ISZ PCOM0
JMP I PCOM0
PCOM1, 0
CIF 0
JMS I (PRINT
TEXT "COM1 COM1"
ISZ PCOM1
JMP I PCOM1
PCOMM, 0
CIF 0
JMS I (PRINT
TEXT "COMM COMM"
ISZ PCOMM
JMP I PCOMM
LPT34, 0 //VT78'S SERIAL VERSION OF LPT (IOT'S 65-66)
CIF 0
JMS I (PRINT
TEXT "LP34 LPT (SERIAL)"
ISZ LPT34
JMP I LPT34
PRX5A, 0
CIF 0
JMS I (PRINT
TEXT "RX5A RX50,RX51 (RX50)"
ISZ PRX5A
JMP I PRX5A
PRX5B, 0
CIF 0
JMS I (PRINT
TEXT "RX5B RX52,RX53 (RX50)"
ISZ PRX5B
JMP I PRX5B
*6000
//ROUTINE TO LOAD THE FIND THE NEW SYSTEM HANDLER,
//LOAD IT INTO CORE AND VERIFY THAT IT IS A
//VALID SYSTEM HANDLER
SYSSET, 0
CIF CDF 0 /LOAD THE OUTPUT DEVICE HANDLER
JMS I (DEVGET /INTO F0 7200-7577
CDF 0
TAD I (ENTRY /GET THE ENTRY POINT OF THE HANDLER
CDF 30
DCA I (NEWDEV /SAVE IT IN F3 FOR LATER
CDF 10
CLA
CIF CDF 0
JMS I (SPACE1 /SKIP OVER ANY SPACES IN THE COMMAND
TAD (NAME /GET POINTER TO THE NEW HANDLER FILE NAME
DCA I (STBLK /SAVE IT FOR THE LOAD FROM SYS
TAD (BUFHN /GET START OF BUFFER TO LOAD TO
DCA I (STLOC /SAVE IT FOR THE READ
JMS I (LODEGR /LOAD THE NEW HANDLER FILE
JMS CHKHND /SEE IF HANDLER IS LEGAL
CIF CDF 30
JMP I SYSSET /EXIT
//ROUTINE TO CHECK IF THE HANDLER IS LEGAL
CHKHND, 0
TAD I (BUFHN /GET MINUS THE NUMBER OF HANDLERS IN THE FILE
DCA MNOHND /SAVE IT
TAD MNOHND /GET IT BACK
TAD (12 /GET MAXIMUM ALLOWED # OF HANDLERS
SPA CLA /ARE THERE TOO MANY HANDLERS
JMP I (TOOMNY /YES, OUTPUT AN ERROR MESSAGE
TAD (BUFHN /NO, GET START OF HANDLER BUFFER
DCA HNDPTR /SET UP POINTER FOR IT
CHKSYS, TAD HNDPTR /GET POINTER TO THE START OF THE HEADER BLOCK
TAD SYSOFF /ADD IN OFFSET TO THE SYSTEM WORD
DCA LOCPTR /SAVE THAT LOCATION
TAD I LOCPTR /GET THE WORD WITH THE SYSTEM BIT
RTL /PUT THE SYSTEM BIT IN THE LINK
SZL /IS THIS A SYSTEM HANDLER?
JMP CHKSIZ /YES, NOW CHECK FOR 1 OR 2 PAGE
CLL CLA /NO
ISZ MNOHND /ANY MORE HANDLERS?
SKP /YES, LETS CHECK THE NEXT ONE
JMP I (NOTSYS /NO, OUTPUT AN ERROR MESSAGE
TAD HNDPTR /GET THE HANDLER POINTER
TAD (10 /ADD IN OFFSET TO START OF NEXT HANDLER
DCA HNDPTR /SAVE NEW POINTER
JMP CHKSYS /CHECK THE NEXT HANDLER
CHKSIZ, RAR /MOVE THE SIZE BIT INTO THE LINK
SZL CLA /IS IT A TWO PAGE HANDLER
TAD (-1 /YES, SET SWITCH TO A MINUS 1
CDF 30 /NO, LEAVE AC=0
DCA I (SYSSIZ /SAVE SWITCH IN FIELD THREE
CDF 10
TAD HNDPTR /GET THE START OF THE CORRECT HANDLER
TAD DCBOFF /ADD IN OFFSET TO THE DCW
DCA LOCPTR /SAVE THE LOCATION
TAD I LOCPTR /GET THE DCB WORD
AND (7770 /SET BITS 9-11 TO 0 - TENTATIVE FILE INDICATOR
CDF 30
DCA I (NEWDCB /SAVE THE NEW DCB WORD IN FIELD THREE
CDF 10
TAD HNDPTR /GET THE START OF THE CORRECT HANDLER
TAD LENOFF /ADD IN THE OFFSET TO THE LENGTH OF DEV. WORD
DCA LOCPTR /SAVE THE LOCATION
TAD I LOCPTR /GET THE DEVICE LENGTH
CDF 30
DCA I (DEVLEN /SAVE IT IN FIELD THREE
CDF 10
JMP I CHKHND
MNOHND, 0 /MINUS NO OF HANDLERS
HNDPTR, 0 /HANDLER POINTER
LOCPTR, 0 /LOCATION POINTER
SYSOFF, 6 /SYSTEM AND SIZE BIT IN WORD 6 OF HANDLER
DCBOFF, 5 /DCB WORD IS WORD 5
LENOFF, 10 /LENGTH OF DEVICE IN WORD 10
PAGE
//NO SYSTEM DEVICE FOUND ERROR ROUTINE
NOTSYS, TAD (CIF 10 /SET UP FOR VALID RETURN
CDF 0
DCA I (PRCDF /DATA FIELD CHANGE FOR VALID RETURN
CDF 10
CIF 0
JMS I (PRINT /OUTOUT THE ERROR MESSAGE
TEXT "NOT A VALID SYSTEM HANDLER!!"
TAD (CIF 0 /RESTORE RETURN FOR PRINT
CDF 0
DCA I (PRCDF /DATA FIELD RESTORATION
CIF 0
JMP I (GOAWAY /EXIT TO MONITOR AFTER ERROR MESSAGE
//TOO MANY HANDLERS IN FILE ERROR ROUTINE
TOOMNY, TAD (CIF 10 /SET UP FOR VALID RETURN
CDF 0
DCA I (PRCDF /DATA FIELD CHANGE FOR VALID RETURN
CDF 10
CIF 0
JMS I (PRINT /OUTPUT ERROR MESSAGE
TEXT "TOO MANY INDIVIDUAL HANDLERS IN THIS HANDLER FILE!!"
TAD (CIF 0 /RESTORE RETURN FOR PRINT
CDF 0
DCA I (PRCDF /DATA FIELD RESTORATION
CIF 0
JMP I (GOAWAY /EXIT TO MONITOR AFTER ERROR MESSAGE
OPT0, LINPTR
OPT1, 0
////OS8 - 'SET SYS DEVICE LOGDEV:HANDLR' CODE
///PORTION OF SET PROGRAM TO CREATE A NEW SYSTEM DEVICE
//THIS PORTION OF THE SET PROGRAM WILL
//QUERY THE USER TO SEE IF HE WANTS TO ZERO
//THE DIRECTORY AND IF HE WISHES TO BOOT THE
//NEW SYSTEM DEVICE AFTER IT IS BUILT.
//IF THE PROGRAM IS CALLED THRU BATCH THEN THE
//QUESTIONS ARE NEVER ASKED DEFAULTS WILL BE
//USED WHICH ARE TO NOT ZERO THE DIRECTORY AND
//TO BOOT THE NEW DEVICE.
//THE INPUT FILE SPEC THAT WAS INPUTTED WILL
//THEN BE LOOKED FOR TO SEE IF THE FILE IS
//AVAILABLE ON THE OLD SYSTEM DEVICE AND IF
//NOT AN ERROR MESSAGE WILL BE OUTPUT AND
//AGAIN WE EXIT TO MONITOR.
//ONCE THE FILE IS FOUND IT IS CHECKED TO SEE
//IF IT IS A SYSTEM HANDLER AND IF NOT AN
//ERROR MESSAGE IS OUTPUT AND EXIT TO MONITOR.
//IF IT IS A VALID SYSTEM HANDLER, IT IS THEN CHECKED
//TO SEE IF IT IS A ONE OR TWO PAGE HANDLER.
//BLOCKS 7-67 ARE TRANSFERED FROM THE OLD
//SYSTEM DEVICE TO THE NEW SYSTEM DEVICE.
//THEN THE HANDLER IS THEN LOADED INTO CORE
//AND BLOCKS 0 AND 66 ARE BUILT FROM THE
//INFORMATION CONTAINED ON THE EXISTING SYSTEM
//DEVICE AND IN THE NEW HANDLER FILE.
//BLOCKS 0 AND 66 ARE THEN WRITTEN TO THE NEW SYSTEM
//DEVICE.
//IF IT WAS REQUESTED TO ZERO THE DIRECTORY
//THIS IS NOW DONE.
//IF NOT THIS ROUTINE IS SKIPPED.
//IF THE USER WISHED TO BOOT THE NEW DEVICE
//THEN THE MONITOR AREAS OF CORE ARE SET TO
//THE INFORMATION CONTAINED IN BLOCKS 0 AND 66
//AND WE EXIT TO 07600 IN THE NEW MONITOR.
//IF IT WAS NOT REQUESTED TO BOOT WE EXIT
//THE SET ROUTINE 'GOAWAY'
FIELD 3
*0000
*0020
//DEFINITIONS
K40, 40 /BIT 6 MASK
K77, 77 /BIT 0-5 MASKOUT
K100, 100
K177, 177
K200, 200
K203, 203 /CTRL C CODE
K212, 212 /LINEFEED CODE
K215, 215 /RETURN CODE
KC203, -203 /MINUS CTRL C CODE
CHAR, 0 /CHARACTER HOLD AREA
POINT, 0 /CHARACTER POINTER HOLD AREA
STTRN, 0 /STARTING BLOCK TO TRANSFER
TRNCNT, 0 /NO. OF TIMES TO TRANSFER 7 BLOCKS
DEVLEN, 0 /LENGTH OF NEW SYSTEM DEVICE
UPDLOC, 0 /LOCATION TO UPDATE
SYSSIZ, 0 /HANDLER SIZE SWITH - 0=1 PAGE -1=2 PAGE
NEWDCB, 0 /NEW DCB WORD
NEWDEV, 0 /ENTRY POINT FOR OUTPUT DEVICE
LCKUSR, 7700 /LOCKIN USR LOCATION
DATEWD, 7666 /DATE WORD LOCATION IN FIELD 1
BCHIND, 7777 /BATCH INDICTAOR LOCATION IN FIELD 0
ZEROYN, "Y /DEFAULT IS ZERO DIRECTORY
BOOTYN, "N /DEFAULT IS DON'T BOOT THE NEW SYSTEM
FLBUFF, FILBUF /POINTER TO BUFFER BEING USED
FILBUF=0 /BUFFER TO LOAD BLOCK TO
BLK0L=FILBUF /BLOCK 0 LOWER BUFFER
BLK0U=FILBUF+200 /BLOCK 0 UPPER BUFFER
BLK66L=FILBUF+400 /BLOCK 66 LOWER BUFFER
BLK66U=FILBUF+600 /BLOCK 66 UPPER BUFFER
//ROUTINE POINTERS
ASKYN, ASKER /ASK A QUESTION ROUTINE
MSGPRT,PRTMSG /MESSAGE PRINTING ROUTINE
// USR INSTRUCTIONS
FETCH=1
FIND=2
ENTER=3
CLOSE=4
DECODE=5
CHAIN=6
ERROR=7
USRIN=10
USROUT=11
INQUIR=12
RESET=13
//MESSAGE TABLE
*200
ZROMSG, TEXT "DO YOU WISH TO ZERO THE NEW SYSTEM DEVICE DIRECTORY? Y OR N: "
BOTMSG, TEXT "DO YOU WISH TO BOOT THE NEW SYSTEM DEVICE? Y OR N: "
SYSBLT, TEXT "SYSTEM BUILT"
//START OF 'SET SYS DEVICE LOGDEV:HANDLR' CODE
*2000
//THIS IS THE MAJOR ROUTINE OF THE SET SYS
//DEVICE CODE. ALL MAJOR FUNCTIONS ARE EITHER
//DONE HERE OR ARE CALLED FROM HERE.
CHGSYS, CLA CLL /CLEAR AC AND LINK
CDF 30 /SET DATA FIELD TO CURRENT FIELD
CIF 10 /SET INSTRUCTION FIELD TO USR FIELD
JMS I LCKUSR /LOCK IN USR
USRIN
CLL CLA
CDF 0
TAD I BCHIND /GET BATCH INDICATOR
CDF 30
RTL /PUT BATCH RUNNING INDICATOR IN LINK
SZL CLA /IS BATCH RUNNING?
JMP USEDEF /YES, USE DEFAULTS TO QUESTIONS
JMS I ASKYN /NO, QUERY THE USER
ZROMSG /DO YOU WISH TO ZERO DIRECTORY?
DCA ZEROYN /SAVE THE ANSWER
JMS I ASKYN
BOTMSG /DO YOU WISH TO BOOT THE NEW SYSTEM
DCA BOOTYN /SAVE THE ANSWER
//SYSSET LOADS THE DEVICE HANDLER AND THE NEW
//SYSTEM HANDLER INTO CORE SO THAT BOTH MAY BE
//ACCESS AT ANY TIME
USEDEF, CIF CDF 10
JMS I (SYSSET
CLA CLL
TAD (-7 /GET MINUS NUMBER OF TRANSFERS TO DO
DCA TRNCNT /SAVE IT
TAD (7 /START AT BLOCK 7
DCA STTRN /SAVE START OF TRNSFER BLOCK
TRNMOR, JMS GET7 /READ 7 BLOCKS FROM OLD SYS INTO FIELD 2
JMS PUT7 /WRITE SAME 7 BLOCKS TO NEW DEVICE FROM FIELD 2
TAD STTRN /GET STARTING BLOCK NUMBER
TAD (7 /ADD 7 TO IT
DCA STTRN /SAVE FOR POSSIBLE NEXT TRANSFER
ISZ TRNCNT /HAVE WE OUTPUT A TOTAL OF 61 BLOCKS
JMP TRNMOR /NO, OUTPUT ANOTHER 7 BLOCKS
/YES, UPDATE AND MOVE BLOCK 0 AND 66
//MOV066 READS IN THE OLD SYSTEM BLOCKS 0 AND
//66 AND PUTS THE NEW SYSTEM HANDER AND
//RELATED INFORMATION INTO THEIR BUFFER AND
//THEN WRITES THEM BACK OUT TO THE NEW DEVICE
JMS I (MOV066
CLA CLL
TAD ZEROYN /GET THE ZERO DIRECTORY SWITCH
TAD (-"Y /GET A MINUS 'Y'
SNA CLA /SHOULD WE ZERO THE DIRECTORY?
JMS I (UPD1 /YES, UPDATE BLOCK 1 - DIRECTORY
JMS I MSGPRT /OUTPUT SYS BUILT MESSAGE
SYSBLT
JMS I (OCRLF /OUTPUT A RETURN AFTER THE MESSAGE
CLA
TAD BOOTYN /GET THE BOOT SWITCH
TAD (-"Y /GET A MINUS 'Y'
SNA CLA /BOOT THE NEW DEVICE
JMP I (BOOTIT /YES, BOOT AWAY
CIF CDF 0 /NO, EXIT NORMALLY
JMP I (GOAWAY
GET7, 0
CLA
DCA GETBUF /SET UP BUFFER TO LOAD TO
TAD STTRN /GET STARTING BLOCK NUMBER TO TRANSFER
DCA GETBLK /SAVE IT
CDF 30
CIF 0
JMS I (SHNDLR /CALL SYS HANDLER
1620 /READ IN 16 PAGES (7 BLOCKS) INTO FIELD 2
GETBUF, 0 /STARTING AT BEGINNING OF FIELD
GETBLK, 0 /FROM THIS BLOCK ON SYS DEVICE
JMP F3ERR /ERROR ROUTINE
JMP I GET7
PUT7, 0
CLA
DCA PUTBUF /SET UP TO START AT BEIGINNING OF FIELD
TAD STTRN /GET BLOCK TO START WITH
DCA PUTBLK /SAVE IT
CDF 30
CIF 0
JMS I NEWDEV /CALL OUTPUT DEVICE HANDLER
5620 /WRITE OUT 16 PAGES (7 BLOCKS) FROM FIELD 2
PUTBUF, 0 /STARTING AT BEGINNING OF FIELD
PUTBLK, 0 /ONTO THIS BLOCK ON THE OUTPUT DEVICE
JMP F3ERR1 /ERROR ROUTINE
JMP I PUT7
F3ERR, CIF CDF 0
JMP I (F0ERR /READ ERROR
F3ERR1, CIF CDF 0
JMP I (F0ERR1 /WRITE ERROR
PAGE
//ROUTINE TO UPDATE BLOCK 0 AND 66
//THESE BLOCKS CONTAIN MANY THINGS TO BE CHANGED
//AMONG THEM ARE THE BOOTSTRAP AND THE SYSTEM HANDLER
MOV066, 0
//READ IN BLOCK 0
CDF 30
CIF 0
JMS I (SHNDLR /CALL OLD SYSTEM DEVICE HANDLER
0220 /READ 1 BLOCK INTO FIELD 2
BLK0L /STARTING AT BLOCK 0 BUFFER
0 /FROM BLOCK 0
JMP I (F3ERR /ERROR BRANCH
//READ IN BLOCK 66
CDF 30
CIF 0
JMS I (SHNDLR /CALL OLD SYSTEM DEVICE HANDLER
0220 /READ 1 BLOCK FROM FIELD 2
BLK66L /STARTING AT BLOCK 66 BUFFER
66 /FROM BLOCK 66
JMP I (F3ERR /ERROR BRANCH
//UPDATE BUFFERS CONTAINING BLOCKS 0 AND 66
JMS I (CHG066 /ROUTINE FOR BUFFER CHANGES
//WRITE OUT BLOCK 0
CDF 30
CIF 0
JMS I NEWDEV /WRITE TO NEW DEVICE
4220 /WRITE 1 BLOCK FROM FIELD 2
BLK0L /STARTING AT BLOCK 0 BUFFER
0 /TO BLOCK 0
JMP I (F3ERR1 /ERROR BRANCH
//WRITE OUT BLOCK 66
CDF 30
CIF 0
JMS I NEWDEV /WRITE TO NEW DEVICE
4220 /WRITE 1 BLOCK FROM FIELD 2
BLK66L /STARTING AT BLOCK 66 BUFFER
66 /TO BLOCK 66
JMP I (F3ERR1 /ERROR BRANCH
JMP I MOV066
PAGE
//ROUTINE TO PUT THE NEW SYSTEM HANDLER INTO THE
//APPROPRIATE LOCATIONS IN THE BUFFERS WHERE THERE
//ARE BEING STORED TEMPORARILY AND TO UPDATE
//OTHER RELATED INFO.
CHG066, 0
CLL CLA
CDF 10
TAD I (MNOHND /GET MINUS THE NUMBER OF HANDLERS IN FILE
CDF 30
CIA /MAKE IT POSITIVE
AND (17 /KEEP ONLY BITS 8-11
RTL /MULTIPLY BY 10 - # OF LOCATIONS PER HEADER
RAL
TAD (1 /ADD IN OFFSET TO FIRST HANDLER
TAD (BUFHN /ADD IN START OF BUFFER WITH BOOTSTRAP
DCA BOOTLN /SAVE THE LOCATION OF THE BOOTSTRAP LENGTH
TAD BOOTLN /GET IT BACK
TAD (1 /ADD OFFSET TO START OF BOOTSTRAP
DCA BOOTST /SAVE LOCATION OF START OF BOOTSTRAP
//UPDATE BLOCK 66 (LOWER) TO REFLECT NEW HANDLER INFO
//SET UP DCW TABLE TO SHOW NEW DCB WORD
TAD NEWDCB /GET THE NEW DCB WORD
CDF 20
DCA I SYSDCB /SAVE IN FIELD 2 AT THE SYS DCB LOCATION
CDF 30
TAD NEWDCB /GET BACK THE DCB WORD
CDF 20
DCA I DSKDCB /SAVE IT IN FIELD 2 AT THE DSK DCB LOCATION
CDF 30
//SET UP THE DHR TABLE
TAD (SHNDLR /GET THE OFFSET TO THE SYSTEM HANDLER
CDF 20
DCA I DHRPTR /SAVE IT IN THE FIRST LOCATION OF THE DHR TABLE
CDF 30
ISZ DHRPTR /INCREMENT THE POINTER FOR THE NEXT SAVE
TAD (SHNDLR /GET THE OFFSET AGAIN
CDF 20
DCA I DHRPTR /SAVE DSK SAME AS SYS
CDF 30
//ZERO OUT THE REST OF THE TABLE
ZERDHR, ISZ DHRPTR /INCREMENT THE POINTER AGAIN
CDF 20
DCA I DHRPTR /ZERO THE LOCATION
CDF 30
ISZ DHRLEN /LAST LOCATION TO ZERO YET
JMP ZERDHR /NO, ZERO ANOTHER ONE
//MOVE FIELD 1 7600 IMAGE TO NEW BLOCK 0 (LOWER)
//FROM NEW BLOCK 66 (LOWER)
TAD (-200 /MOVE 200 LOCATIONS
JMS I (MOVIT
CDF 20 /FROM FIELD 2
BLK66L /FIRST HALF OF BLOCK 66 BUFFER
CDF 20 /TO FIELD 2
BLK0L /1ST HALF OF NEW BLOCK 0
//MOVE BOOTSTRAP TO BLOCK 0 (LOWER)
TAD BOOTST /GET START OF BOOTSTRAP LOCATION
DCA MVBT0 /SAVE IT FOR BLOCK 0 MOVE
CDF 10 /NO OF LOCATIONS IS IN FIELD 1
TAD I BOOTLN /GET THE LENGTH OF THE BOOTSTRAP
CDF 30
JMS I (MOVIT
CDF 10 /FROM FIELD 1
MVBT0, 0 /STARTING AT START OF BOOTSTRAP
CDF 20 /TO FIELD 2
BLK0L /AT THE START OF BLOCK 0 BUFFER
//MOVE 47 LOCATIONS OF THE BOOTSTRAP TO BLOCK 66(LOWER)
TAD BOOTST /GET START BOOTSTRAP LOCATION LOCATION AGAIN
DCA MVBT66 /SAVE IT FOR BLOCK 66 MOVE
TAD (-47 /MOVE 47 LOCATIONS
JMS I (MOVIT
CDF 10 /FROM FIELD 1
MVBT66, 0 /STARTING AT BEGINNING OF BOOTSTRAP
CDF 20 /TO FIELD 2
BLK66L /STARTING AT BEGINNING OF BLOCK 66 BUFFER
//MOVE 1ST PAGE OF NEW HANDLER TO NEW BLOCK 0 (UPPER)
TAD (-135 /MOVE 135 LOCATIONS
JMS I (MOVIT
CDF 10 /FROM FIELD 1
BUFHN+207 /FROM THE 1ST PAGE OF THE NEW HANDLER
CDF 20 /TO FIELD 2
BLK0U+7 /2ND HALF OF NEW BLOCK 0 BUFFER
//MOVE 2ND PAGE OF NEW HANDLER TO NEW BLOCK 66 (UPPER)
TAD (-174 /MOVE 174 LOCATIONS
JMS I (MOVIT
CDF 10 /FROM FIELD 1
BUFHN+400 /START OF 2ND PAGE OF HANDLER
CDF 20 /TO FIELD 2
BLK66U /2ND HALF OF NEW BLOCK 66 BUUFER
//SET LAST FOUR LOCATIONS OF BLOCK 66 UPPER TO ZERO
CLA /CLEAR AC
CDF 20
DCA I (BLK66U+174 /CLEAR LOCATION 174
DCA I (BLK66U+175 /CLEAR LOCATION 175
DCA I (BLK66U+176 /CLEAR LOCATION 176
DCA I (BLK66U+177 /CLEAR LOCATION 177
JMP I CHG066
//ALL THESE LOCATIONS ARE IN REFERENCE TO
//THE BLOCK 0 AND BLOCK 66 BUFFERS
BOOTLN, 0 /BOOTSTRAP LENGTH LOCATION
BOOTST, 0 /LOCATION OF START OF BOOTSTRAP
SYSDCB, BLK66L+160 /LOCATION OF SYS DCB WORD
DSKDCB, BLK66L+161 /LOCATION OF DSK DCB WORD
DHRPTR, BLK66L+47 /LOC. IN DHR TABLE, INITIALLY TO FIRST LOC.
DHRLEN, -15 /NO. OF LOC. TO ZERO IN DHR TABLE
PAGE
//ROUTINE TO UPDATE BLOCK 1
//THIS BLOCK MUST BE UPDATED TO SHOW THAT THERE IS
//ONLY ONE FILE ON THE DEVICE NAMELY AN EMPTY ONE
//THE LENGTH OF THE REMAINING SPACE THERE
//THIS IS ONLY DONE UPON REQUEST
//THE DEFAULT IS TO NOT ZERO THE DIRECTORY
UPD1, 0
CDF 30
CIF 0
JMS I NEWDEV /CALL OUTPUT DEVICE HANDLER
0220 /READ 1 BLOCK INTO FIELD 2
FILBUF /STARTING AT LOCATION FILBUF
1 /FROM BLOCK 1
JMP I (F3ERR /ERROR BRANCH
TAD FLBUFF /GET LOCATION 0 OF BUFFER
DCA UPDLOC /STORE IT
STA /GET A MINUS ONE IN AC
CDF 20 /BE SURE TO STORE INFO IN FIELD 2
DCA I UPDLOC /SAVE IN MINUS NUMBER OF FILES SPOT
ISZ UPDLOC /SET UP FOR LOCATION 1 IN BUFFER
TAD (70 /GET START OF FILE STORAGE BLOCK
DCA I UPDLOC /SAVE IT
ISZ UPDLOC /SET UP FOR LOCATION 2 IN BUFFER
DCA I UPDLOC /SET LINK TO NEXT SEGMENT TO ZERO
ISZ UPDLOC /SET UP FOR LOCATION 3
DCA I UPDLOC /SET POINTER FOR TENTATIVE FILES TO 0
ISZ UPDLOC /SET UP FOR LOCATION 4
STA /1 ADDITIONAL INFO WORDS USED FOR DATE
DCA I UPDLOC
ISZ UPDLOC /SET UP FOR LOCATION 5
DCA I UPDLOC /ZERO HERE MEANS EMPTY FILE
ISZ UPDLOC /SET UP FOR LOCATION 6
TAD DEVLEN /GET THE DEVICE LENGTH
TAD (-70 /SUBTRACT 70 FROM IT
CIA /MAKE IT A MINUS
DCA I UPDLOC /SAVE MINUS NO. OF BLOCKS FOR FILE STORAGE
CDF 30
CIF 0
JMS I NEWDEV /CALL OUTPUT DEVICE HANDLER
4220 /WRITE 1 BLOCK FROM FIELD 2
FILBUF /STARTING AT LOCATION FILBUF
1 /TO BLOCK 1
JMP I (F3ERR1 /ERROR BRANCH
JMP I UPD1
PAGE
//MOVIT MOVES CORE AROUND (CALLABLE FROM ANY FIELD)
// TAD (-# OF LOCS TO MOVE
// JMS MOVE
// CDF FROM FIELD
// FROM BUFFER LOCATION START
// CDF 'TO' FIELD
// TO BUFFER
MOVIT, 0
DCA MVCT /STORE # OF LOCATIONS TO MOVE
RDF /FIND OUT FIELD TO RETURN TO
TAD (CIF CDF /ADD IN A FIELD CHANGE INSTRUCTION
DCA MOVRET /SAVE THE FIELD CHANGE INSTRUCTION
TAD I MOVIT /GET DATA FIELD TO READ FROM INSTRUCTION
DCA MVCDF2 /SAVE IT
ISZ MOVIT /POINT TO INPUT BUFFER VALUE
TAD I MOVIT /GET START OF BUFFER TO MOVE
DCA MVTM1 /SAVE IT
ISZ MOVIT /POINT TO OUTPUT DATA FIELD INSTRUCTION
TAD I MOVIT /GET THE INSTRUCTION
DCA MVDF /SAVE IT
ISZ MOVIT /POINT TO OUTPUT BUFFER VALUE
TAD I MOVIT /GET START OF BUFFER TO DEPOSIT IN
DCA MVTM2 /SAVE IT
ISZ MOVIT /POINT TO RETURN LOCATION
TAD MVCT /GET # OF LOCATIONS TO MOVE
SNA CLA /ANY LOCATIONS TO MOVE
JMP MOVRET /NO, LET'S GET OUT OF HERE
/YES, LET'S MOVE THEM
MVCDF2, CDF 0 /GETS ALTERED TO INPUT FIELD INSTRUCTION
TAD I MVTM1 /READ A LOCATION
MVDF, HLT /GETS ALTERED TO OUTPUT FIELD INSTRUCTION
DCA I MVTM2 /PUT THE VALUE IN THE OUTPUT LOCATION
ISZ MVTM1 /BUMP POINTER TO INPUT LOCATION
ISZ MVTM2 /BUMP POINTER TO OUTPUT LOCATION
ISZ MVCT /BUMP NUMBER OF LOCATIONS TO MOVE
JMP MVCDF2 /YES, DO NEXT LOCATION
MOVRET, HLT /GETS ALTERED TO RETURN TO CALLING FIELD
JMP I MOVIT
MVCT, 0
MVTM1, 0
MVTM2, 0
PAGE
//ROUTINE TO PRINT MESSAGES
PRTMSG, 0
CLL CLA /CLEAR AC AND LINK
TAD I PRTMSG /GET MESSAGE POINTER
DCA POINT /SAVE IT
ISZ PRTMSG
NOP
TTYMOR, TAD I POINT /GET TWO CHARACTERS
BSW /BYTE SWAP
AND K77 /MASK OUT SECOND CHARACTER - BITS 0-5
SNA /ARE BITS 6-11 = ZERO
JMP I PRTMSG /YES, END OF MESSAGE
JMS BLDCHR /NO, PRINT THE CHARACTER
TAD I POINT /GET SAME TWO CHARACTERS AGAIN
AND K77 /MASK OUT FIRST CHARACTER
SNA /ARE BITS 6-11 = ZERO
JMP I PRTMSG /YES, END OF MESSAGE
JMS BLDCHR /NO, PRINT THE CHARACTER
ISZ POINT /INCREMENT MESSAGE POINTER
JMP TTYMOR /GET NEXT TWO CHARACTERS
JMP I PRTMSG /END OF MESSAGE
BLDCHR, 0 /ROUTINE TO BUILD CHARACTER
DCA CHAR /STORE THE 6-BIT CHARACTER CODE
TAD CHAR /GET IT BACK
AND K40 /IS IT GREATER THAN 40
SNA CLA /NO
TAD K100 /YES, SET UP FOR 300 CODE
TAD K200 /SET UP FOR 200 CODE
TAD CHAR /GET THE CHARACTER BACK
JMS CHROUT /OUTPUT THE CHARACTER
CLA CLL
JMP I BLDCHR
CHROUT, 0 /ROUTINE TO OUTPUT THE CHARACTER
TLS /OUTPUT THE CHARACTER
TSF /SKIP ON CLEAR FLAG
JMP .-1
CLA CLL /CLEAR THE CHARACTER OUT OF THE AC
JMP I CHROUT
//ROUTINE TO ASK A QUESTION
//REQUIRING A ONE CHARACTER ANSWER
//AND TO ACCEPT THE ANSWER
//ANSWER IS RETURNED IN THE AC
ASKER, 0
TAD I ASKER /FIND THE MESSAGE POINTER
DCA MSGPTR /STORE IT
ISZ ASKER /SET UP ASKER TO EXIT TO THE RIGHT LOCATION
NOP
JMS PRTMSG /OUTPUT THE MESSAGE
MSGPTR, 0
//ACCEPT THE ANSWER
CLA CLL
KSF /SKIP IF KEYBOARD NOT READY
JMP .-1 /LOOP TILL WE GOT THE ANSWER
KRB /GET THE ANSWER
AND (137 /MASK OUT LC BIT
TAD K200 /AND CONVERT TO 8 BIT
TAD KC203 /CHECK FOR A CTRL C
SNA /WAS IT A CTRL C?
JMP OUT /YES, GET BACK TO MONITOR
TAD K203 /SET THE AC TO THE CHARCTER VALUE AGAIN
DCA CHAR /STORE THE ANSWER
TAD CHAR /GET IT BACK
JMS CHROUT /PRINT IT BACK
JMS OCRLF /OUTPUT A CRLF
TAD CHAR /GET IT AGAIN
JMP I ASKER /EXIT
//ROUTINE TO OUTPUT CRLF AFTER A MESSAGE
OCRLF, 0
TAD K212 /GET A LINEFEED CODE
JMS CHROUT /OUTPUT IT
TAD K215 /GET A CARRAIGE RETURN CODE
JMS CHROUT /OUTPUT IT
JMP I OCRLF
//ROUTINE TO JUMP OUT ON A CTRL C
OUT, CIF CDF 0
JMP I (MONIT5
PAGE
//ROUTINE TO BOOT THE NEW SYSTEM DEVICE
//THIS IS ONLY DONE UPON REQUEST
//THE DEFAULT IS A REQUEST TO BOOT
BOOTIT, 0
//SAVE THE DATE AND BATCH INDICATOR
CDF 10
TAD I DATEWD /GET THE DATE WORD
DCA SAVDAT /SAVE IT
CDF 0
TAD I BCHIND /GET THE BATCH INDICATOR WORD
DCA SAVBAT /SAVE IT
CDF 30
//ROUTINE TO READ IN BLOCK 0 AND 66
//READ IN BLOCK 0
CDF 30
CIF 0
JMS I NEWDEV /CALL NEW SYSTEM DEVICE HANDLER
0220 /READ 1 BLOCK INTO FIELD 2
BLK0L /STARTING AT BLOCK 0 BUFFER
0 /FROM BLOCK 0
JMP I (F3ERR /ERROR BRANCH
//READ IN BLOCK 66
CDF 30
CIF 0
JMS I NEWDEV /CALL NEW SYSTEM DEVICE HANDLER
0220 /READ 1 BLOCK FROM FIELD 2
BLK66L /STARTING AT BLOCK 66 BUFFER
66 /FROM BLOCK 66
JMP I (F3ERR /ERROR BRANCH
//MOVE FIELD 0 CODE TO FIELD 0
TAD (-200 /MOVE 200 LOCATIONS
JMS I (MOVIT
CDF 20 /FROM FIELD 2
BLK0U /FROM THE UPPER PART OF BLOCK 0
CDF 0 /TO FIELD 0
MONIT /STARTING AT 7600
//MOVE FIELD 1 CODE TO FIELD 1
TAD (-200 /MOVE 200 LOCATIONS
JMS I (MOVIT
CDF 20 /FROM FIELD 2
BLK66L /STARTING AT BEGINNING OF BLOCK 66
CDF 10 /TO FIELD 1
MONIT /BEGINNING AT 7600
//MOVE FIELD 2 CODE TO FIELD 2, JUST IN CASE
TAD (-174 /MOVE 174 LOCATIONS
JMS I (MOVIT
CDF 20 /FROM FIELD 2
BLK66U /STARTING AT SECOND HALF OF BLOCK 66
CDF 20 /TO FIELD 2
MONIT /BEGINNING AT 7600
//DISMISS USR FROM CORE
CDF 30 /SET DATA FIELD TO CURRENT FIELD
CIF 10 /SET INSTRUCTION FIELD TO USR FIELD
JMS I LCKUSR /DISMISS USR
USROUT
//RESTORE THE DATE AND BATCH WORDS
TAD SAVDAT /GET THE SAVED DATE WORD
CDF 10
DCA I DATEWD /PUT IT WHERE IT BELONGS
TAD SAVBAT /GET THE SAVED BATCH WORD
CDF 0
DCA I BCHIND /PUT IT BACK TOO
//NOW EXIT TO NEW MONITOR
CIF CDF 0 /BE SURE TO EXIT TO FIELD 0
JMP I (MONIT /MONITOR LOCATION
SAVDAT, 0 /DATE SAVE LOCATION
SAVBAT, 0 /BATCH INDICATOR SAVE LOCATION
$$$ /END OF PROGRAM