Trailing-Edge
-
PDP-10 Archives
-
AP-4178E-RM
-
swskit-sources/feddt.mac
There is 1 other file named feddt.mac in the archive. Click here to see a list.
;
; THIS IS A TOPS-20 ADAPTATION OF DAVE MCLURE'S
; TOPS-10 PROGRAM DDT11-MAC
;
;;;0001;;; NOV 22,1977 CHANGES TO MAKE FEDDT RUN ON REL.3
; DO ALL CONVERSING WITH FE DEV IN 16-BIT MODE
SALL
UNIVERSAL FEDDT
SEARCH MONSYM
SEARCH MACSYM
FLG=0
F.FLIP==000001
F.FLOP==000002
F.LOPN==000004 ;CURRENT LOCATION IS OPEN
F.MOPN==000010 ;MASK OPEN
F.MASK==000020 ;ESCAPE M TYPED
F.IOCT==000200 ;ASSEMBLING AN OCTAL NUMBER
F.IDEC==000400 ;ASSEMBLING A DECIMEL NUMBER
F.IHEX==001000 ;ASSEMBLING A HEX NUMBER
F.ISIX==002000 ;ASSEMBLING A SIXBIT SYMBOL
F.SYMB==004000 ;ASSEMBLING A SYMBOL
F.CACH==010000 ;USE CACHE IF POSSIBLE
F..ESC==400000 ;TYPED ESCAPE TWICE
T1=1
T2=T1+1
T3=T2+1
T4=T3+1
T5=T4+1
DOT=6 ;CURRENT LOCATION
DOTFOO=7 ;IN CASE IS 32 OR 48 BIT INSTRUCTION
LC=10 ;LAST CHAR INPUT, SOMETIMES
EXPRESS=11 ;BUILD EXPRESSIONS IN THIS AC
STATE=12
SYM=13 ;POINTER TO SYMBOL BLOCK
SYMBOL=14 ;CURRENT SYMBOL WE ARE BUILDING
P=17
EVSIZ==34000 ;28K PDP-11 CORE
IO.RLB=1000
IO.WLB=400
SUBTTL VARIOUS DEFINITIONS
OPDEF CAL11. [CALLI 125]
OPDEF CAL78. [CALLI 156]
OPDEF NODUUO [CALLI 157]
OPDEF PJRST [JRST]
;KL10 INSTRUCTION DEFINITIONS
OPDEF EXTEND [123000,,0]
OPDEF MOVSLJ [016000,,0]
.JBSA== 120 ;REL JOB STARTUP ADDR
;MACRO DEFINITIONS
DEFINE TYPE (X) <
PUSH P,T2
MOVEI T2,X
PUSHJ P,TSTRNG
POP P,T2
>
;
; PROMPT SETS UP THE PROMPT BUFFER, AND TYPES
; ITS ARGUMENT.
;
DEFINE PROMPT (X),<
PUSH P,T1
PUSH P,T2
PUSH P,T4
PUSH P,T5
MOVEI T1,20
MOVE T2,[440700,,X]
PUSH P,T2
PUSHJ P,TSTRNG
POP P,T2
MOVEI T4,20
MOVE T5,[440700,,OPNPMT]
EXTEND T1,OPNMOV
HALTF
POP P,T5
POP P,T4
POP P,T2
POP P,T1
>
SUBTTL JOB CONSTANTS
;REENTRY LOCATION
.JBREN=:124
LOC .JBREN
LEVELR ;REENTRY POINT
;DDT11 VERSION NUMBER
VWHO==1
VDDT11==1
VMINOR==1
VEDIT==3
.JBVER=:137
LOC .JBVER
BYTE (3)VWHO(9)VDDT11(6)VMINOR(18)VEDIT
RELOC 0
SUBTTL STARTUP
DDT11::
JFCL
RESET
SETZ 0 ;ZERO 1ST AC
MOVEI 17,1 ;MAKE BLT POINTER
BLT 17,17 ;CLEAR ALL AC'S
MOVE P,[IOWD PDLEN,PDL]
MOVE T1,[0,,0] ;DEFAULT OUTPUT MODE IS SYMBOLIC
MOVEM T1,O.MODE
SETZM MEMORY
SETZM CACHEL ;HIGHEST ADDR IN CACHE
JRST LEVELR
SUBTTL PORT AND NETWORK ROUTINES FROM DDT11
REPEAT 0,<
INI.00:
TYPE [ASCIZ \
respond with /PORT:# or /NODE:# or /NODE:name or /FILE\]
PUSH P,T1
MOVX T1,<.PRIIN> ;PRIMARY INPUT
CFIBF ;CLEAR TYPE AHEAD
POP P,T1
INI.05:
TYPE [ASCIZ \
Input: \]
JSR SIXIN ;SHOULD RETURN JUST "/"
JRST INI.00
JUMPN T1,INI.00
CAIE T2,"/"
JRST INI.00
JSR SIXIN ;GET COMMAND
JRST INI.00
MOVNI T2,1 ;BUILD MASK
INI.06:
MOVSI T3,-4
INI.07:
MOVE T4,[ SIXBIT \FILE\
SIXBIT \NODE\
SIXBIT \PORT\
SIXBIT \WENABL\ ](T3) ;CHECK FOR MATCH
AND T4,T2
CAMN T1,T4 ;MATCH ?
JRST INI.08 ;FOUND MATCH
AOBJN T3,INI.07
LSH T2,6 ;ADJUST MASK
JUMPN T2,INI.06
JRST INI.00 ;DON'T UNDERSTAND
INI.08:
JRST @[ RDDUMP
INI.09
INI.10
INI.00 ](T3)
INI.09: JSR SIXIN ;GET NODE ARGUMENT
JRST INI.00
JSR SIXOCT ;CONVERT TO NUMBER
JFCL
MOVEM T1,NODE# ;SAVE NODE NAME
MOVEI T1,1 ;CODE TO LOCK
LOCK T1,
JRST LOCKER
JRST LEVL.0
INI.10: JSR SIXIN ;GET SIXBIT ARGUMENT
JRST INI.00
JSR SIXOCT ;CONVERT TO OCTAL
JRST INI.00
ANDI T1,7
MOVEM T1,PORT# ;SAVE PORT NUMBER
> ;END OF REPEAT 0
SUBTTL FRONT END DEVICE CONTROL
;
;OPNFE TAKES THE DEVICE SPECIFICATION (ASCIZ /FE3/, E.G.) IN T1
;AND SKIPS ON SUCCESS.
;
OPNFE:
MOVEM T1,FEFLG ;SET FLAG & NAME
HRROI T2,FEFLG
MOVX T1,GJ%SHT!GJ%OLD
GTJFN
PJRST WARN
MOVE 15,1 ;SAVE JFN
;;;0001;;;MAKE 16-BIT MODE
MOVE 2,[200000,,OF%WR!OF%RD] ;;;0001;;; BYTE SIZE,,OPEN WRITE
OPENF
POPJ P, ;FAIL RETURN
MOVEI 2,.MODTE ;OPEN DTE
SETZ 3,
MTOPR
SETZM MEMORY ;REALLY FROM PDP11 MEMORY
AOS (P)
POPJ P,
SUBTTL MAIN LOOP AND REENTY POINT
LEVELR:
TYPE [ASCIZ \[FEDDT]\]
LEVL.0:
PUSHJ P,CRLTYP ;RETURN CARRIAGE
LEVEL0:
MOVX T1,.PRIIN ;PRIMARY INPUT
RFMOD ;READ TERM MODE
IOR T2,[TT%WKF!TT%WKN!TT%WKP!TT%WKA]
SFMOD ;BREAK ON ALL CHARS
SETZM LPTFLG ;CLEAR TO LPT FLAG
TRZ FLG,F.LOPN!F.MASK!F.MOPN!F.CACH
HLRS ORADIX ;RESET OUTPUT RADIX
HLRS O.MODE ;RESET CURRENT OUTPUT MODE FROM PERMANENT
HLRS BYTCNT ;RESET REPETITION COUNT
LEVEL1:
MOVE P,[IOWD PDLEN,PDL]
TRZ FLG,F.SYMB!F.IOCT!F.IDEC!F.IHEX
LEVEL2:
MOVEI STATE,STATE0 ;DISPATCH TABLE WHEN IDLE
LEVEL3:
TRZ FLG,F..ESC
SETZM INPOPR ;CLEAR INPUT OPERATOR
SETZM EXPRESS ;EXPRESSION WE HAVE BUILT
SETZM OCTIN#
SETZM DECIN#
SETZM HEXIN#
SETZM SYMBOL
MOVE T4,[POINT 6,SYMBOL]
LOOP:
PUSHJ P,GETCHR ;GET A COMMAND CHAR
MOVEM T1,T2
ADD T2,STATE
JRST @(T2) ;DISPATCH ON CHARACTER
SUBTTL ILLEGAL CHARACTER
;HERE WHEN USER TYPES IN AN ILLEGAL CHARACTER
ILLCHR:
TYPE [BYTE (7)7,"?",7,11,7,0]
PUSH P,T1
MOVX T1,<.PRIIN> ;PRIMARY INPUT
CFIBF ;CLEAR TYPE AHEAD
POP P,T1
JRST LEVEL1
SUBTTL VARIOUS COMMAND ROUTINES
;HERE WHEN THE USER TYPES A TAB COMMAND
COMHT:
PUSHJ P,CRLTYP ;RETURN CARRIAGE
SKIPN DOT,LSTADR ;IN CASE SET IN FUNNY WAY
MOVE DOT,DATA ;LAST DATA BECOMES ADR
JRST COMLF1
;HERE WHEN THE USER TYPES A LINE FEED COMMAND
COMLF:
SKIPE DOTFOO
MOVE DOT,DOTFOO
SETZM DOTFOO
PUSH P,T1
MOVEI T1,15 ;RETURN CARRIAGE
PUSHJ P,TYPCHR
POP P,T1
ADDI DOT,2
TRO FLG,F.LOPN ;FLAG LOCATION IS OPEN
COMLF1:
ANDI DOT,177776 ;FLUSH EXTRA BITS
MOVE T1,DOT
PUSHJ P,ADRTYP ;TYPE ADR
MOVEI T1,"/"
PUSHJ P,TYPCHR
COMLF2:
PUSHJ P,TABTYP
MOVE T1,DOT
TRZ FLG,F.CACH ;NOT CACHE, PLEASE
PUSHJ P,GETWRD
JRST [ PUSHJ P,CRLTYP
TYPE [ASCIZ \?OUT OF BOUNDS - \]
PUSHJ P,OCTYPE
PUSHJ P,CRLTYP
JRST LEVEL0 ]
MOVEM T1,DATA ;SAVE DATA
PUSHJ P,DATYPE
JRST LEVEL2
SUBTTL MORE COMMAND ROUTINES =, /, RUBOUT
;HERE WHEN USER TYPES =
EQUALS: TRNN FLG,F.LOPN ;IS LOCATION OPEN ?
JRST ILLCHR ;NO SO ILLEGAL
PUSH P,O.MODE ;SAVE OUTPUT MODE
MOVEI T1,2 ;OUTPUT AS NUMERIC
HRRM T1,O.MODE
PUSH P,BYTCNT
SKIPN T5,DOTFOO
HRRZ T5,DOT
SUBI T5,-2(DOT)
ANDI T5,777777 ;HALF WORD ONLY
LSH T5,-1
HRRM T5,BYTCNT
PUSH P,DOTFOO
SETZM DOTFOO
MOVE T1,DOT
TRO FLG,F.CACH ;USE CACHE IF POSSIBLE
PUSHJ P,GETWRD
JRST CAL1ER
MOVEM T1,DATA
PUSHJ P,DATYPE ;TYPE DATA
POP P,DOTFOO
POP P,BYTCNT
POP P,O.MODE ;RESTORE OUTPUT MODE
JRST LOOP
;HERE WHEN USER TYPES / AT END OF A NUMBER
OPNLOC: TRZE FLG,F.MASK ;ASKING ABOUT THE MASK ?
JRST [ PUSHJ P,TABTYP
HRRZ T1,S.MASK ;GET THE MASK
PUSHJ P,RADTYP ;DISPLAY IT
TRO FLG,F.MOPN ;MAKS NOW OPEN
PUSHJ P,TABTYP
JRST LEVEL2 ]
PUSHJ P,ACCUM
HRRZ DOT,EXPRESS
SETZM DOTFOO
TRO FLG,F.LOPN ;FLAG LOCATION IS OPEN
JRST COMLF2
;HERE WHEN USER TYPES A RUBOUT
COMRUB:
TYPE [ASCIZ \xxx \]
JRST LEVEL1
SUBTTL MORE COMMANDS ^, \, _
;HERE WHEN THE USER TYPES AN UP ARROW COMMAND
COMARR:
PUSHJ P,CRLTYP ;RETURN CARRIAGE
SETZM DOTFOO
HRRZ T1,BYTCNT ;NUMBER OF BYTES
HRRZ T2,O.MODE ;GET OUTPUT MODE
CAIE T2,0 ;SYMBOLIC ?
CAIN T2,1 ; OR ADDRESS ?
ASH T1,1 ;CONVERT WORD COUNT TO BYTES
CAIN T2,2 ;OR NUMERIC
ASH T1,1 ;CONVERT WORD COUNT TO BYTES
SUBI DOT,(T1)
JRST COMLF1 ;REST LIKE A LINE FEED COMMAND
;HERE WHEN THE USER TYPE A ^Z
COMCZ:
HALTF ;QUIT
JRST LEVEL0 ;CONTINUE
;HERE WHEN THE USER ENDS AN EXPRESSION WITH A BACKSLASH
COMBSE:
PUSHJ P,ACCUM ;FINISH ACCUMULATING EXPRESSION
MOVE T1,EXPRESS ;MAKES ADDRESS
JRST COMBS5
;HERE WHEN THE USER TYPES A BACKSLASH
COMBSL:
SKIPN T1,LSTADR
MOVE T1,DATA
COMBS5:
PUSHJ P,TABTYP
TRZ FLG,F.CACH ;NO CACHE, PLEASE
PUSHJ P,GETWRD ;DO EXAMINE
JRST [ PUSHJ P,CAL1ER
JRST LEVEL0 ]
MOVEM T1,DATA
PUSHJ P,DATYPE
JRST LEVEL2
;HERE WHEN USER TYPE A BACK ARROW
BKARRW:
PUSHJ P,ACCUM ;FINISH ACCUMULATING EXPRESSION
MOVE T1,EXPRESS
PUSHJ P,ADRTYP ;AND TYPE OUT SYMBOL FOR IT
PUSHJ P,TABTYP
JRST LEVEL0 ;AND DONE
SUBTTL EXPRESSION ACCUMULATOR
ACCUM:
SETZ T1,
TRZE FLG,F.IOCT
MOVE T1,OCTIN
TRZE FLG,F.IDEC
MOVE T1,DECIN
TRZE FLG,F.IHEX
MOVE T1,HEXIN
TRZE FLG,F.SYMB
PUSHJ P,EVLSYM
ACCUM0:
MOVE T2,INPOPR ;GET INPUT OPERATOR
XCT [ ADD EXPRES,T1
SUB EXPRES,T1
IMUL EXPRES,T1
IDIV EXPRES,T1
IOR EXPRES,T1
AND EXPRES,T1
XOR EXPRES,T1 ](T2)
ANDI EXPRESS,177777 ;16 BITS ONLY
MOVEI STATE,STATEE
SETZM OCTIN
SETZM DECIN
SETZM HEXIN
SETZM SYMBOL
MOVE T4,[POINT 6,SYMBOL]
POPJ P,
SUBTTL VARIOUS EXPRESSION TERMINATION ROUTINES
FINEXP:
PUSHJ P,ACCUM ;ACCUMULATE WHATEVER WE HAVE
JRST COMLF2
EXPLUS:
TDZA T1,T1 ;CODE FOR NEXT TIME IS 0
EXPMIN:
MOVEI T1,1
JRST EXP.DO
EXPMUL:
MOVEI T1,2
JRST EXP.DO
EXPDIV:
MOVEI T1,3
JRST EXP.DO
EXPIOR:
MOVEI T1,4
JRST EXP.DO
EXPAND:
MOVEI T1,5
JRST EXP.DO
SUBTTL EXPRESSION ACCUMULATOR CONTINUED
EXPXOR:
MOVEI T1,6
EXP.DO:
PUSH P,T1 ;SAVE CODE FOR NEXT TIME
PUSHJ P,ACCUM ;ACCUMULATE EXPRESSION
POP P,INPOPR ;NEXT INPUT OPERATION
JRST LOOP ;THEN DONE
EXPEQU:
PUSHJ P,ACCUM ;ACCUMULATE EXPRESSION
MOVE T1,EXPRESS ;GET EXPRESSION
PUSHJ P,RADTYP
PUSHJ P,TABTYP
JRST LEVEL2
SLOWLM:
PUSHJ P,ACCUM ;ACCUMULATE EXPRESSION
MOVE T1,EXPRESS ;GET EXPRESSION
HRRZM T1,SBEGIN ;SET LOWER LIMIT FOR SEARCH
JRST LEVEL2
SUPLIM:
PUSHJ P,ACCUM ;ACCUMULATE EXPRESSION
MOVE T1,EXPRESS ;GET EXPRESSION
HRRZM T1,S..END ;SET UPPER LIMIT FOR SEARCH
JRST LEVEL2
SUBTTL NUMBER ASSEMBLER
;HERE WHEN ASSEMBLING A OCTAL, DECIMEL OR HEX NUMBER
ASSNUM:
MOVEI STATE,STATEE
MOVE T2,OCTIN
LSH T2,3
CAIL T1,70
TRO FLG,F.IDEC ;NUMBER IS DECIMEL
ADDI T2,-60(T1)
MOVEM T2,OCTIN
MOVE T2,DECIN
IMULI T2,^D10
ADDI T2,-60(T1)
MOVEM T2,DECIN
MOVE T2,HEXIN
LSH T2,4
ADDI T2,-60(T1)
MOVEM T2,HEXIN
TRNN FLG,F.IDEC!F.IHEX
TROA FLG,F.IOCT
TRZ FLG,F.IOCT
JRST ASYMB2
;HERE WHEN ASSEMBLING A SYMBOL
ASSYMB:
MOVEI STATE,STATEE
TRO FLG,F.SYMB
TRZ FLG,F.IDEC!F.IOCT!F.IHEX
ASYMB2:
SUBI T1,40 ;CONVERT CHAR TO SIXBIT
CAME T4,[POINT 6,SYMBOL,35]
IDPB T1,T4 ;ADD CHAR TO SYMBOL
JRST LOOP
SUBTTL SYMBOL TABLE ROUTINES
;HERE BECAUSE USER FINISHED SYMBOL WITH ":"
DEFSYM:
TRNE FLG,F.SYMB
SKIPN T1,SYMBOL ;SYMBOL HE DEFINED
JRST ILLCHR
HRRZ T2,DOT ;CURRENT ADR
PUSHJ P,ADDSYM
PUSHJ P,TABTYP
JRST LEVEL1
;HERE TO EVALUATE A SYMBOL
EVLSYM:
MOVE T1,SYMBOL
CAMN T1,[SIXBIT \.\]
JRST [ HRRZ T1,DOT
POPJ P, ]
PUSHJ P,SYMFND ;TRY TO FIND SYMBOL
JRST SYMERR
HRRZ T1,1(SYM) ;GET VALUE OF SYMBOL
POPJ P,
SYMERR:
TYPE [ASCIZ \U \]
JRST LEVEL0
;HERE IF TERMINATES EXPRESSION WITH A CARRIAGE RETURN
STECR:
PUSHJ P,STEFIN ;STORE IF APPROPRIATE
JRST LEVEL0
;HERE TO DO DEPOSIT MAYBE AFTER CR OR LF OR UP ARROW
STEFIN:
TRZE FLG,F.MOPN ;IS MASK OPEN ?
JRST SETMSK ;SET MASK
TRZN FLG,F.LOPN ;IS LOCATION OPEN ?
POPJ P, ;NO SO JUST RETURN
PUSHJ P,ACCUM ;DO LAST MINUTE ACCUMULATION
MOVE T1,DOT ;GET ADR TO EXAMINE
MOVE T2,EXPRESS ;GET JUNK TO DEPOSIT
PUSHJ P,PUTWRD ;TRY TO DEPOSIT IT
PUSHJ P,CAL1ER
POPJ P,
;HERE TO SET MASK
SETMSK:
PUSHJ P,ACCUM ;DO LAST MINUTE ACCUMULATION
HRRM EXPRESS,S.MASK ;SET MASK
POPJ P,
;HERE IF TERMINATES EXPRESSION WITH A LF
STELF:
PUSHJ P,STEFIN ;DEPOSIT LOCATION MAYBE
JRST COMLF ;DID DEPOSIT
;HERE IF TERMINATES EXPRESSION WITH AN UP ARROW
STEARR:
PUSHJ P,STEFIN
JRST COMARR
SUBTTL ESCAPE ROUTINES
;HERE IS USER TYPES ESCAPE WHILE INPUTTING AN EXPRESSION
ESCEXP:
PUSHJ P,ACCUM ;ACCUMULATE EXPRESSION SO FAR
;HERE IF USER TYPES ESCAPE
ESCAPE:
MOVEI STATE,STATSC ;SET ESCAPE FLAG
SETZ T5,
JRST LOOP
ESCESC:
TRO FLG,F..ESC
JRST LOOP
;HERE TO ACCUMULATE NUMBER AFTER ESCAPE
ESC..0:
IMULI T5,^D10
ADDI T5,-60(T1) ;ACCUMULATE NUMBER
JRST LOOP
SUBTTL VARIOUS ESCAPE ROUTINES (A-T)
ESC..A:
MOVEI T1,1 ;SETTING ADDRESS MODE
JRST ESCMOD
ESC..B:
MOVEI T1,3 ;SETTING BYTE MODE
SKIPN T5 ;DID HE TYPE NUMBER ?
MOVEI T5,2 ;NO SO 2 BYTES
JRST ESCMOD
ESC..C:
MOVEI T1,2 ;SETTING NUMERIC MODE
JRST ESCMOD
ESC..D:
JRST DUMP ;DUMP 11 ONTO DISK
ESC..E:
MOVEI T1,6 ;RAD50 OUTPUT
MOVEI T5,1 ;N/A
JRST ESCMOD
ESC..K: ;SUPPRESS SYMBOL
TXNN FLG,F..ESC ;IF TWO OF THEM
JRST ESCK1 ; NO, ONLY ONE
SETCMM SUPSYM ;SUPPRESS ALL SYMBOLS
JRST LEVEL2 ;AND RETURN
ESCK1:
JUMPE SYM,ILLCHR
MOVE T1,1(SYM) ;GET VALUE
TLO T1,SMF.SU ;SUPPRESS SYMBOL
MOVEM T1,1(SYM)
PUSHJ P,TABTYP
JRST LEVEL2 ;AND RETURN
ESC..P: ;SET RELOCATION
TXNN FLG,F..ESC ;TWO ESCAPES & NO NUMBER IS CANCEL
TLO T5,200000 ;MAKE SOME NON-ZERO VALUE
MOVEM T5,RELVAL ; AND SET UP RELOCATION
PUSHJ P,TABTYP ;TAB OVER
JRST LEVEL2 ;AND KEEP GOING
ESC..R: CAIG T5,1 ;IS RADIX REASONABLE ?
JRST ILLCHR ;NO SO FLUSH REQUEST
HRRM T5,ORADIX ;YES SET NEW RADIX
TRZE FLG,F..ESC ;SETTING PERMANENT MODE ?
HRLM T5,ORADIX ;YES
PUSHJ P,TABTYP
JRST LEVEL2 ;AND KEEP GOING
ESC..S: MOVEI T1,0 ;SETTING INSTRUCTION MODE
JRST ESCMOD
ESC..I:
SKIPA T1,[EXP 5] ;SETTING EBCDIC OUTPUT
ESC..T:
MOVEI T1,4 ;SETTING ASCII OUTPUT
SKIPN T5 ;DID USER SPECIFY NUMBER OF BYTES ?
MOVEI T5,2 ;DEFAULT IS 2
SUBTTL MORE ESCAPE ROUTINES ($$)
ESCMOD:
SKIPN T5
MOVEI T5,1 ;DEFAULT IS ONLY ONE
HRRM T5,BYTCNT
PUSHJ P,TABTYP
HRRM T1,O.MODE ;SET CURRENT MODE
TRZN FLG,F..ESC
JRST LEVEL2 ;NOT SETTING PERMANENT MODE
HRLS BYTCNT ;LOCAL COUNT IS PERMANT COUNT
HRLM T1,O.MODE ;SET PERMANT MODE
JRST LEVEL2
SUBTTL MORE ESCAPE ROUTINES (V)
;ESCAPE V - WATCH A LOCATION FOR VARIANCE
ESC..V:
SKIPE MEMORY
JRST ILLCHR
TRNN FLG,F.LOPN ;IS LOCATION OPEN ?
JRST ILLCHR ;GIVE USER "?"
AOJ T5, ;DON'T ALLOW ZERO (FILLS QUEUE)
TXNN FLG,F..ESC ;ONE $ OR TWO?
IMULI T5,^D100 ;IN TENTHS OF A SEC UNLESS $$
ESC.V0:
MOVE T1,T5 ;GET SLEEP AMOUNT
DISMS ;DISMISS PROCESS
MOVE T1,DOT ;GET ADDRESS TO WATCH
TRZ FLG,F.CACH ;NO CACHE, PLEASE
PUSHJ P,GETWRD ;GET DATA
JRST ILLCHR
MOVE T2,T1 ;COPY DATA
XOR T2,DATA ;COMPARE TO LAST TIME
AND T2,S.MASK ;MASK OFF IRREVELANT BITS
JUMPE T2,ESC.V9 ;BRANCH IF SAME AS BEFORE
TYPE [BYTE (7)15,12,0]
PUSH P,T1 ;SAVE NEW DATA
MOVEM T1,DATA ;SAVE NEW DATA
MOVE T1,DOT ;GET ADDRESS
PUSH P,T5 ;SAVE T5
PUSHJ P,ADRTYP
TYPE [ASCIZ \/ \]
PUSHJ P,DATYPE ;TYPE NEW DATA
POP P,T5 ;
POP P,DATA ;IN CASE DATYPE CHANGED IT
ESC.V9:
SKPINC ;HAS USER TYPED A CHARACTER ?
JRST ESC.V0 ;NO SO KEEP WATCHING
JRST LEVEL2 ;GO PROCESS NEXT COMMAND
SUBTTL MORE ESCAPE ROUTINES (M,N,W)
ESC..M:
TRO FLG,F.MASK ;MASK IS OPEN
MOVEI STATE,STATEE ;EVALUATE AS AN EXPRESSION
JRST LEVEL3 ;GET REST OF COMMAND
ESC..N:
TROA FLG,F.FLIP ;FLAG WE ARE DOING NOT SEARCH
JRST ESC..W ;AND SEARCH
ESC..O: ;HERE TO OPEN FE DEVICE
TXNN FLG,F..ESC ;TWO ALT-MODES?
JRST ILLCHR ; NO, ONLY ONE, USER CONFUSED
JUMPL T5,ILLCHR ;ILLEGAL IF NEGATIVE DTE REQUESTED
CAIL T5,10 ;FE0-7 ARE LEGAL
JRST ILLCHR ;ILLEGAL
LSH T5,17 ;THIRD BYTE OF 5
ADD T5,FEDEV ;FRONT END DEVICE SPEC
MOVE T1,T5 ;DEVICE TO OPEN
SETOM FEFLG ;SET FLAG FOR REMOTE EXAM/DEP
PUSHJ P,OPNFE ;OPEN THE FRONT END DEVICE
JRST [
PUSHJ P,WARN
JRST LEVEL2]
PUSHJ P,CRLTYP ;RETURN CARRIAGE
TYPE [ASCIZ \[FEDDT - FRONT END PDP-11 CORE OPEN]\]
PUSHJ P,CRLTYP ;AND RETURN CARRIAGE AGAIN
JRST LEVEL2 ;DONE
SUBTTL MORE ESCAPE ROUTINES
;HERE FOR (ALTMODE)W WHICH IS WORD SEARCH
ESC..W:
TRZ FLG,F.FLIP ;FLAG WE WANT MATCHES
MOVE T1,EXPRESS ;GET WHAT TO SEARCH FOR
AND T1,S.MASK
MOVEM T1,S.WORD
MOVE DOT,SBEGIN
PUSH P,T1 ;SO WE CAN COME BACK TO ESC.W2
ESC.W2: ;.HERE WITH T1 ON STACK
POP P,T1 ;.RESTORE T1 FROM TYPE CHECK
MOVE T1,DOT
TRZ FLG,F.CACH ;NO CACHE, PLEASE
PUSHJ P,GETWRD ;GET CURRENT LOC
JRST ESCW.9
MOVEM T1,DATA ;SAVE DATA
AND T1,S.MASK ;MASK SOME OF THE BITS
TRNE FLG,F.FLIP ;ARE WE LOOKING FOR MATCH ?
JRST [ CAMN T1,S.WORD ;DON'T WANT MATCH
JRST ESCW.8
JRST ESCW.6 ]
CAME T1,S.WORD
JRST ESCW.8
ESCW.6:
PUSHJ P,CRLTYP ;RETURN CARRIAGE
MOVE T1,DOT ;GET ADDRESS
PUSHJ P,ADRTYP
TYPE [ASCIZ \/ \]
PUSHJ P,DATYPE
PUSH P,T1 ;SAVE T1
MOVX T1,<.PRIIN> ;.PRIMARY INPUT
SIBE ;.CHECK IF TYPE AHEAD
JRST ESCW.T ;. YES
POP P,T1 ;. NO, RESTORE T1
; [CODE CONTINUES ON NEXT PAGE]
SUBTTL MORE OF ESCAPE W
; [CODE MAY HAVE FALLEN THROUGH FROM LAST PAGE]
ESCW.8:
ADDI DOT,2
CAMLE DOT,S..END
JRST ESCW.9
PUSH P,T1 ;SAVE T1 FROM MASHING MONITOR
MOVX T1,<.PRIIN> ;.PRIMARY INPUT
TRNN DOT,377 ;.DON'T DO TOO MANY JSYS'S
SKIPA
JRST ESC.W2 ;.DON'T DO SO MANY JSYS'S
SIBE ;.SKIP IF NO TYPE AHEAD
JRST ESCW.T ;. TYPE AHEAD
JRST ESC.W2 ;.NO TYPE AHEAD, GO ON
ESCW.9:
PUSHJ P,CRLTYP ;TYPE 2 C.R.LF.
PUSHJ P,CRLTYP ; "
JRST LEVEL2
ESCW.T: ;HERE WHEN INTER BY CHAR TYPED
POP P,T1
JRST ESCW.9
ESC..X:
TXNN FLG,<F..ESC> ;ONCE OR TWICE?
JRST RDCMP0 ;USE IN CORE FILE
JRST RDCMPR ;TWICE, READ FILE
ESC..Y: ;ESCAPE Y
TXNN FLG,<F..ESC> ;TYPED ESCAPE ONCE OR TWICE?
JRST RDDUMP ; ONCE
JRST RDSYMB ; TWICE
;ROUTINE TO GET A WORD FROM THE PDP-11
; CALL PUSHJ P,GETWRD ;WITH ADR IN T1
; ERROR RETURN
; SUCCES DATA IN T1
;
; IF THE CACHE FLAG (F.CACH) IS ON, WE WILL TRY TO
; GET THE WORD FROM THE CACHE. IF IT IS NOT IN THE
; CACHE, WE WILL PUT IT IN IN EITHER CASE.
;
GETWRD:
PUSH P,T3
PUSH P,T4
SETZ T4,
HRRZM T1,T3
MOVEI T2,1 ;FUNCTION 1
SKIPN T1,MEMORY ;DO I HAVE MEMORY IN CORE ?
JRST GETWD1 ;NO
ROT T3,-2 ;4 ADDRS PER WORD
ADDI T1,(T3) ;ADD BASE ADDRESS
CAML T1,MEMLIM ;IS IT IN RANGE ?
JRST GETWD5 ;ERROR RETURN
GETWD0:
JUMPGE T3,.+3 ;T3 SIGN ON IFF HIGH PART
HRRZ T1,(T1)
JRST GETWD3
HLRZ T1,(T1)
JRST GETWD3
;HERE TO DO STATION CONTROL TO GET DATA
GETWD1:
SKIPN FEFLG ;CHECK FOR REMOTE FE
JRST GETWD4 ;IGNORE REQUEST
TRNN FLG,F.CACH ;ARE WE USING CACHE?
JRST GETWDC ; NO, GET WORD FROM CORE
JUMPE T3,GETWDC ;ZERO ALWAYS IN 11
CAMGE T3,CACHEA ;IN RANGE FOR CACHE?
JRST GETWDC ; NO
CAMLE T3,CACHEL ;CACHE LIMIT
JRST GETWDC ; OUT OF CACHE
SUB T3,CACHEA ;REL ADDR IN CACHE
MOVE T1,CACHE(T3)
JRST GETWD3 ;AND RETURN
GETWDC:
PUSH P,T3 ;SAVE ADDRESS
MOVE 14,[BYTE (16)IO.RLB(8)"E","M"]
MOVEM 14,PKT
SETZM PKT+1
SETZM PKT+2
DPB 3,[POINT ^D16,PKT+2,15]
MOVEI 3,2
DPB 3,[POINT ^D16,PKT+2,31]
MOVEI 1,0(15)
MOVE 2,[442000,,PKT] ;;;0001;;;
MOVNI 3,6 ;;;0001;;;
SOUT
ERJMP [PUSHJ P,WARN ;FAILED?
JRST GETWD4 ;SO RETURN
]
MOVEI 2,.MOEOF
SETO 3,
MTOPR
ERJMP [PUSHJ P,WARN ;FAILED?
JRST GETWD4 ;SO RETURN
]
PUSHJ P,GETPKT ;GET THE RETURN PACKET
JRST [ POP P,T3 ;ERROR OCCURRED
JRST GETWD4
]
LDB 1,[POINT ^D16,PKT1+3,15]
POP P,T3 ;ADDR REQUESTED
MOVE T4,CACHEL ;OLD CACHE LIMIT
ADDI T4,2 ;TEST FOR NEXT ADDR
CAIN T3,(T4) ;IS NEW ADDR JUST NEXT ONE?
JRST GETWNC ; YES, SO JUST ADD IT
MOVEM T3,CACHEA ; NO, FRESH ENTRY
MOVEM T3,CACHEL ;SO IS WHOLE CACHE
JRST GETWDD ;AND GO ON
GETWNC:
MOVEM T4,CACHEL ;NEW LIMIT
GETWDD:
MOVE T4,CACHEA ;START OF CACHE
SUB T3,T4 ;PROPER ADDRESS
MOVEM T1,CACHE(T3) ;STORE INTO CACHE
GETWD3:
AOS -2(P) ;SKIP RETURN
GETWD4:
POP P,T4
POP P,T3
POPJ P,
GETWD5:
SUB T1,MEMORY ;BASE ADDRESS
LSH T1,2 ;TRUE ANSWER FOR CORE SIZE
JRST GETWD4
GETPKT: MOVE 2,[POINT 16,PKT1] ;;;0001;;;
MOVNI 3,6 ;;;0001;;;;GET THE FIXED PORTION
SIN ;OF THE PACKET
ERJMP [PUSHJ P,WARN ;FAILED?
POPJ P, ;SO RETURN
]
LDB 3,[POINT 16,PKT1+2,32-1]
JUMPLE 3,GETPK1 ;IF ANY MORE
LSH 3,-1 ;;;0001;;;IN WORDS
MOVN 3,3 ;THEN
SIN ;GET THE REST.
ERJMP [PUSHJ P,WARN ;FAILED?
POPJ P, ;SO RETURN
]
GETPK1:
LDB T1,[POINT 8,PKT1+1,32-1]
MOVN T1,T1 ;DOES THE RETURN STATUS
ANDI T1,377 ;INDICATE
TRNE T1,200 ;FAILURE ?
AOS (P) ;NO -- NORMAL RETURN
POPJ P,
SUBTTL DEPOSIT IN PDP11 MEMORY
; CALL PUSHJ P,PUTWRD ;WITH ADR IN T1 & DATA IN T2
PUTWRD:
PUSH P,T3
PUSH P,T4
MOVEM T1,T3
SKIPE MEMORY ;DID WE READ A DUMP ?
JRST GETWD4 ;YES DON'T TRY ANYTHING
SKIPN FEFLG ;DID WE OPEN FE DEVICE?
JRST GETWD4 ; NO, SO DIE
SETZM CACHEL ;INVALIDATE CACHE
MOVE 14,[BYTE (16)IO.WLB(8)"E","M"]
MOVEM 14,PKT
DPB T2,[POINT ^D16,PKT+3,15]
MOVEI 2,2
DPB 2,[POINT ^D16,PKT+2,31]
DPB 3,[POINT ^D16,PKT+2,15]
MOVNI 3,11 ;;;0001;;;
MOVEI 1,0(15)
MOVE 2,[442000,,PKT] ;;;0001;;;
SOUT
MOVEI 2,.MOEOF
SETO 3,
MTOPR
ERJMP GETWD4 ;ERROR, SO COMPLAIN
PUSHJ P,GETPKT ;GET THE RETURN PACKET
JRST GETWD4 ;(ERROR)
JRST GETWD3 ;SUCCESS
CAL1ER:
TYPE [ASCIZ \?\]
PUSHJ P,OCTYPE
TYPE [ASCIZ \? \]
POPJ P,
SUBTTL SYMBOL TABLE ROUTINES
;SYMBOLS ARE KEPT IN THREE WORD BLOCKS(ALPHABETIZED) STARTING AT LOCATION POINTED TO BY SYMBEG
; 1ST WORD IN BLOCK IS SIXBIT SYMBOL
; 2ND WORD IS HALF WORD FLAGS,,VALUE
SMF.SU==000001 ;SYMBOL IS SUPPRESSED(DEFINED WITH =)
SMF.RG==000002 ;SYMBOL IS A REGISTER VALUE
SMF.IN==000010 ;SYMBOL IS AN INSTRUCTION
SMF.DD==000020 ;LOW ORDER SIX BITS ARE DESTINATION
SMF.SS==000040 ;LOW ORDER 12 BITS ARE SSDD
SMF.XX==000100 ;LOWORDER 8 BITS ARE XXX(E.G. BR)
SMF.SB==000200 ;SOB TYPE ADDRESS
SMF.RT==000400 ;RTS TYPE REGISTER USAGE
SMF.JS==001000 ;JSR TYPE REGISTER USAGE
SMF.EM==002000 ;EMT TYPE ARGUMENT
SMF.AS==004000 ;ASH TYPE NN ARG
SMF.PL==010000 ;SET PROCESSOR LEVEL
; 3RD WORD IS LINK TO NEXT SYMBOL BLOCK
;HERE TO FIND A MATCH FOR A SYMBOL
; CALL MOVE T1,[SIXBIT \SYMBOL\]
; PUSHJ P,SYMFND
; ERROR RETURN
; SUCCESS RETURN SYM POINTS TO SYMBOL
SYMFND:
SKIPN SYM,SYMBEG ;GET ADR OF BEGINING OF SYMBOL TABLE
POPJ P, ;CAN'T FIND SYMBOL
SYMFN1:
CAMN T1,(SYM) ;HAVE WE FOUND THE SYMBOL ?
JRST CPOPJ1 ;YES
HRRZ SYM,2(SYM) ;GET ADR OF NEXT SYMBOL BLOCK
JUMPN SYM,SYMFN1
POPJ P, ;CAN'T FIND SYMBOL
;HERE TO SEE IF WE CAN FIND A MATCH FOR AN INSTRUCTION
; CALL MOVEI T1,<VALUE>
; PUSHJ P,INVLFN
; LOSE RETURN
; WIN RETURN
INVLFN:
SKIPN SYM,SYMBEG ;ADDRESS OF FIRST SYMBOL BLOCK
POPJ P, ;NO SYMBOL TABLE
INVLF1:
MOVE T2,1(SYM) ;GET SYMBOL VALUE
TLNN T2,SMF.IN ;IS THIS AN INSTRUCTION ?
JRST INVLF8
LDB T3,[POINT 5,1(SYM),4] ;GET NUMBER OF BITS IN INSTRUCTION
MOVE T3,MASKTB-1(T3) ;GET MASK FOR INSTRUCTION
AND T3,T1 ;MASK ARGUMENT
CAIE T3,(T2) ;IS THIS A MATCH ?
JRST INVLF8 ;NO
CPOPJ1:
AOS (P) ;FOR SKIP RETURN
CPOPJ:
POPJ P,
INVLF8:
HRRZ SYM,2(SYM) ;GET ADR OF NEXT SYMBOL BLOCK
JUMPN SYM,INVLF1
POPJ P,
MASKTB: EXP 100000
EXP 140000,160000,170000
EXP 174000,176000,177000
EXP 177400,177600,177700
EXP 177740,177760,177770
EXP 177774,177776,177777
SUBTTL HERE TO FIND A NAME FOR A REGISTER
; CALL: MOVEI T1,# ;REGISTER NUMBER
; PUSHJ P,RGFNDN
; LOSE
; BINGO
RGFNDN:
SKIPN SYM,SYMBEG ;GET FIRST SYMBOL BLOCK ADR
POPJ P, ;NO SYMBOL TABLE
RGFND1:
MOVE T2,1(SYM) ;GET SYMBOL VALUE
TLNN T2,SMF.RG ;IS THIS A REGISTER ?
JRST RGFND8 ;NO
CAIE T1,(T2) ;IS THIS WHAT WE WANTED ?
JRST RGFND8 ;NO
AOS (P) ;SKIP RETURN
POPJ P,
RGFND8:
HRRZ SYM,2(SYM) ;GET NEXT SYMBOL BLOCK
JUMPN SYM,RGFND1 ;NOT YET
POPJ P, ;ERROR RETURN
SUBTTL ADD A SYMBOL TO TABLE
; CALL PUT SYMBOL IN T1, PUT VALUE AND FLAGS IN T2, MISC IN T3
ADDSYM:
MOVE SYM,SYMBEG ;GET ADDRESS OF FIRST SYMBOL BLOCK
ADSYM1:
CAMN T1,@SYM ;DOES THIS MATCH ?
JRST REPSYM ; YES, REPLACE SYMBOL
HRRZ SYM,2(SYM) ;GET ADDRESS OF NEXT SYMBOL BLOCK
JUMPN SYM,ADSYM1
;MAKE A NEW SYMBOL BLOCK
MOVE T4,TOPCOR ;PUT IT IN HIGH CORE SOMEWHERE
ADDI T4,3
MOVEM T4,TOPCOR ;UPDATE PTR
SUBI T4,3 ;MAKE ADDRESS OF BLOCK AGAIN
MOVE SYM,SYMEND ;GET ADDRESS OF LAST SYMBOL BLOCK
HRRZM T4,2(SYM)
HRRZM T4,SYMEND
MOVEM T4,SYM
MOVEM T1,0(SYM)
MOVEM T2,1(SYM)
SETZM 2(SYM)
POPJ P,
REPSYM: ;REPLACE OLD VALUE
PUSH P,T1 ;SAVE SYMBOL NAME
PUSH P,T2 ;AND NEW VALUE
HRRZ T1,1(SYM) ;GET OLD VALUE (NO FLAGS)
CAIN T1,(T2) ;SAME (DISREGARD FLAGS)?
JRST REPSY1 ; YES
MOVE T1,-1(P) ; NO, GET OLD NAME
PUSHJ P,SIXTYP ;TYPE OLD NAME
PUSHJ P,TABTYP ;TAB OVER
MOVE T1,1(SYM) ;GET OLD VALUE
PUSHJ P,OCTYPE ;TYPE IN OCTAL
PUSHJ P,TABTYP ;TAB OVER
HRRZ T1,(P) ;GET NEW VALUE
PUSHJ P,OCTYPE ;TYPE OLD VALUE
PUSHJ P,CRLTYP ;RETURN CARRIAGE
REPSY1:
POP P,1(SYM) ;SET NEW VALUE
POP P,T1 ;AND SYMBOL NAME
POPJ P, ;DONE
SUBTTL MORE SYMBOL TABLE ROUTINES
;HERE TO FIND A NEAR MATCH FOR A VALUE
; CALL MOVEI T1,VALUE TO MATCH
; PUSHJ P,VALFND
; ERROR RETURN
; RETURN WITH SYM SET UP
VALFND:
SKIPE SUPSYM ;SUPPRESS ALL SYMBOLS?
POPJ P, ; YES
PUSH P,T4
SETZ SYM,
MOVE T2,SYMBEG ;ADR OF FIRST SYMBOL BLOCK
VLFND1:
MOVE T3,1(T2) ;GET SYMBOL'S VALUE
TRNE T3,177777 ;IS VALUE ZERO ?
TLNE T3,SMF.SU!SMF.IN!SMF.RG ;IS SYMBOL SUPPRESSED OR INSTRUCTION ?
JRST VLFND7 ;YES SO DON'T TRY IT
CAIGE T1,400(T3) ;IS SYMBOL VALUE MUCH LESS THAN DESIRED ?
CAIGE T1,(T3) ;IS SYMBOL VALUE .LE. DESIRED VALUE ?
JRST VLFND7 ;NO
JUMPE SYM,VLFND4
CAIL T4,(T3) ;IS SYMBOL BETTER THAN LAST MATCH ?
JRST VLFND7 ;NO
VLFND4:
MOVE SYM,T2 ;BEST MATCH SO FAR
HRRZ T4,T3 ;COPY VALUE FOR FUTURE REFERENCE
VLFND7:
HRRZ T2,2(T2) ;GET ADDRESS OF NEXT BLOCK
JUMPN T2,VLFND1
SKIPE SYM
AOS -1(P)
POP P,T4
POPJ P,
;HERE TO READ A SYMBOL TABLE FROM A LISTING
RDSYMB:
PUSHJ P,CRLTYP
PROMPT [ASCIZ \SYMBOL FILE: \]
PUSHJ P,OPNFLA ;OPEN FILE TO READ SYMBOLS FROM
JRST LEVEL0
MOVE T1,[440700,,OPNSTR] ;USE STRING SPACE
MOVE T2,INJFN ;INPUT JFN
MOVX T3,<JS%TYP>
SETZM OPNSTR ;CLEAR BUFFER
JFNS ;GET TYPE INTO OPNSTR
HRROI T2,-1 ;ASSUME NOT A MAP
MOVE T1,[ASCII /MAP/]
CAMN T1,OPNSTR ;IS THIS A MAP?
MOVEI T2,11 ; YES, IS A MAP
MOVEM T2,MAPCHR ;SO TREAT TABS NICELY
GETSC0:
SETZ T5, ;COUNT OF SYMBOLS
SKIPL MAPCHR ;IS THIS A MAP?
JRST GETSC1 ; YES
JSR GETSCH
CAIE T1,14 ;IS THIS A FORM FEED ?
JRST GETSC0 ;LOOK FOR ONE
GETSC1:
JSR GETSCH
CAIE T1,12 ;IS THIS A LINE FEED ?
JRST GETSC1 ;LOOK FOR ONE
GETSC2:
JSR GETSCH
CAIE T1,12 ;IS THIS A LINE FEED ?
JRST GETSC2 ;LOOK FOR ONE
GETSCY: ;HAVE A SYMBOL
SETZB T3,SYMBOL ;BUILD SYMBOL HERE
MOVE T2,[POINT 6,SYMBOL]
; [CODE FALLS THROUGH TO NEXT PAGE]
; [CODE MAY HAVE FALLEN THROUGH FROM LAST PAGE]
GETSCT:
JSR GETSCH ;GET CHAR
SKIPG MAPCHR ;IS THIS A MAP FILE?
JRST GETSCU ; NO
CAMN T1,MAPCHR ;IF MAP, IS THIS TAB?
JRST GETSCT ; YES, IGNORE TABS AT BEGINNING
CAIN T1,40 ;OR IS IT SPACE AT LINE BEGIN?
JRST GETSCT ; YES, SO IGNORE IT
CAIA ; NO, HAVE CHARACTER
GETSC3:
JSR GETSCH
GETSCU:
CAIG T1,40
JRST GETSC4 ;IF SO HAVE FINISHED SYMBOL
CAIN T1,75 ;IF = FINISHED
JRST GETSC4
CAMN T1,MAPCHR ;IF MAP, IS THIS A TAB?
JRST GETSC4 ; YES, MAY BE SYMBOL
SUBI T1,40 ;CONVERT TO SIXBIT
CAME T2,[POINT 6,SYMBOL,35] ;FILLED WORD YET ?
IDPB T1,T2 ;NO SO KEEP FILLING
JRST GETSC3
SUBTTL MORE OF READ SYMBOL TABLE
GETSC4: CAIN T1,75 ;SYMBOLS END WITH SPACE OR =
JRST [ JUMPE SYMBOL,GETSC2
SETZ T4,
JRST GETSC7]
CAME T1,MAPCHR ;IF MAP, MAY END WITH TAB
CAIN T1,40
JRST GETSCS ; NOW HAVE SYNBOL, GET VALUE
JRST GETSC2 ; NOT SYMBOL - FLUSH LINE
GETSCS:
JUMPE SYMBOL,GETSC2 ;IF NO SYMBOL FLUSH LINE
SETZ T4, ;FLAGS
GETSC5: JSR GETSCH
CAIN T1,40
JRST GETSC5
GETSC7: CAIN T1,"="
JRST [ TRO T4,SMF.SU ;SUPPRESSED SYMBOL
JRST GETSC5 ]
CAIN T1,"%"
JRST [ TRO T4,SMF.RG ;REGISTER NAME
JRST GETSC5 ]
CAIL T1,60
CAILE T1,67
JRST GETSC2 ;FLUSH REST OF LINE
GETSC6:
IMULI T3,^D8
ADDI T3,-60(T1)
GETSC9:
JSR GETSCH
CAIL T1,60
CAILE T1,67
CAIA
JRST GETSC6
SKIPL MAPCHR ;IS THIS A .MAP FILE?
CAIE T1,"-" ;HYPHENS FROM MAP?
CAIA
JRST GETSC9 ; YES, IGNORE THEM
CAIN T1,"R" ;IS IT RELOCATABLE?
JRST GETSCR ; YES, SO RELOCATE IT
SUBTTL MORE OF READ SYMBOL TABLE
GETSC8:
MOVE T1,SYMBOL ;COPY SYMBOL
HRRZ T2,T3 ;VALUE
HRL T2,T4 ;FLAGS
SETZ T3,
PUSH P,SYMEND
PUSHJ P,ADDSYM
POP P,T1 ;GET OLD SYMEND
CAME T1,SYMEND
AOS T5 ;COUNT SYMBOL
SKIPG T1,MAPCHR ;IS THIS A .MAP?
JRST GETSC2 ; NO, FLUSH REST OF LINE
CAIE LC,40 ;WAS LAST CHR SPACE OR
CAMN LC,T1 ;WAS LAST CHR TAB?
JRST GETSCY ; YES, SO GET NEXT SYMBOL FROM MAP
JRST GETSC2 ; NO, FLUSH REST OF LINE
SUBTTL MORE SYMBOL TABLE INPUT
GETSCH:
0
PUSHJ P,FILCHR ;GET CHAR FROM FILE
JRST GTSCH5 ;DONE
MOVE LC,T1 ;SAVE LAST CHR INPUT
JRST @GETSCH
GTSCH5:
MOVE T1,INJFN ;INPUT JFN
CLOSF ;CLOSE FILE
PUSHJ P,WARN
TYPE [ASCIZ \ loaded \]
MOVE T1,T5
PUSHJ P,DECTYP
TYPE [ASCIZ \ symbols
\]
JRST LEVEL0
GETSCR: ;HERE TO TRY TO RELOCATE A SYMBOL
SKIPL MAPCHR ;IS THIS A MAP?
JRST GETSRR ; YES, SO JUST A FLAG
SKIPN T1,RELVAL ;DO WE HAVE A RELOCATION?
JRST GETSC2 ; NO, SO DON'T STORE SYMBOL
ADDI T3,(T1) ; YES, SO ADD RELOCATION
GETSRR:
JSR GETSCH ;GET NEXT CHR FOR SEPR CHECK
JRST GETSC8 ;AND RETURN TO LOOP
SUBTTL FILE ROUTINES
;HERE TO OPEN A FILE TO READ
; CALL
; PUSHJ P,OPNFIL
; LOSE RETURN
; WIN RETURN
OPNFIL:
MOVEI T1,<OPNJFN> ;LONG FORM
MOVEI T2,0 ;FROM USER
GTJFN ;GET JFN OF FILE
JRST [PUSHJ P,WARN
POPJ P,]
HRRZM T1,INJFN ;SAVE INPUT JFN
MOVE T2,[17B9+OF%NWT+OF%RD] ;DUMP MODE
OPENF
JRST [PUSHJ P,WARN
POPJ P,]
AOS (P) ;SKIP RETURN
POPJ P, ;
OPNFLA: ;OPEN FILE IN ASCII
MOVX T1,<GJ%OLD!GJ%CFM!GJ%FNS!GJ%SHT>
MOVE T2,[.PRIIN,,.PRIOU] ;PRIMARY
GTJFN ;GET JFN OF FILE
JRST [PUSHJ P,WARN
POPJ P,]
HRRZM T1,INJFN ;SAVE INPUT JFN
MOVE T2,[07B5+OF%RD] ;18 BIT INPUT, READ ONLY
OPENF
JRST [PUSHJ P,WARN
POPJ P,]
AOS (P) ;SKIP RETURN
POPJ P, ;
SUBTTL MORE FILE ROUTINES
;
; WARN USER OF ERROR
;
WARN:
SETZM LPTFLG ;CLEAR TO LPT FLAG
PUSHJ P,CRLTYP ;RETURN CARRIAGE
TYPE [ASCIZ \?FEDDT - \]
MOVE T1,[.PRIOU]
MOVE T2,[.FHSLF,,-1] ;LAST ERR
SETZ T4,
ERSTR ;FULL MESSAGE
JFCL
JFCL
PUSHJ P,CRLTYP ;RETURN CARRIAGE AGAIN
POPJ P,
;HERE TO GET NEXT CHAR FROM A FILE
FILCHR:
PUSH P,T2 ;SAVE T2 FROM DESTR
MOVE T1,INJFN
BIN ;INPUT CHR
PUSH P,T2 ;CHR FROM FILE
GTSTS ;GET INPUT FILE STATUS
TLNN T2,(GS%EOF) ;END-OF-FILE?
AOS -2(P) ; NO
POP P,T1 ;RESTORE CHAR TO T1
POP P,T2 ;RESTORE T2
POPJ P,
SUBTTL SIXBIT TTY INPUT
GETCHR:
PUSH P,T2 ;SAVE REG
MOVX T1,.PRIIN ;PRIMARY INPUT
BIN ;BYTE IN
MOVE T1,T2 ;CHR
POP P,T2
JSR GETCH0
JRST GETCHR
GETCH0: 0
JUMPE T1,@GETCH0 ;FLUSH NULLS
CAIN T1,15 ;IS THIS A CARRIAGE RETURN ?
JRST [ PUSHJ P,GETCHR ;GET LF
MOVEI T1,15 ;MAKE LF
JRST .+1 ]
CAIL T1,40+"A" ;CHECK FOR LOWER CASE
CAILE T1,40+"Z"
CAIA
TRZ T1,40 ;CONVERT TO LOWER CASE
POPJ P,
SUBTTL MORE TTY INPUT ROUTINES
;HERE TO GET A SIXBIT WORD FROM TTY
SIXIN: 0
MOVE T4,[POINT 6,T2]
SETZ T2,
SIXIN2: PUSHJ P,GETCHR ;GET A CHAR FROM TTY
CAIN T1,177
JRST [ TYPE [ASCIZ \xxx\]
JRST @SIXIN ]
CAIL T1,"0"
CAILE T1,"Z"
JRST SIXIN9 ;RETURN
CAILE T1,"9"
CAIL T1,"A"
CAIA
JRST SIXIN9 ;RETURN
SUBI T1,40
CAME T4,[POINT 6,T2,35] ;HAVE WE ALREADY FILLED WORD ?
IDPB T1,T4 ;NOT YET
JRST SIXIN2
SIXIN9: EXCH T1,T2
AOS SIXIN
JRST @SIXIN
;HERE TO CONVERT SIXBIT TO OCTAL
SIXOCT: Z
MOVE T4,[POINT 6,T1]
SETZ T2,
SIXOC1: ILDB T3,T4
JUMPE T3,SIXOC9
CAIL T3,20
CAILE T3,27
JRST @SIXOCT ;CAN'T CONVERT
IMULI T2,^D8
ADDI T2,-20(T3)
CAME T4,[POINT 6,T1,35] ;DONE ALL OF WORD ?
JRST SIXOC1
SIXOC9: EXCH T1,T2
AOS SIXOCT
JRST @SIXOCT
SUBTTL TTY ROUTINES
;HERE TO DISPLAY CONTENTS OF T1 AS AN ADDRESS
ADRTYP: ANDI T1,177777 ;SIXTEEN BITS ONLY PLEASE
HRROM T1,LSTADR ;SAVE LAST ADDRESS DISPLAYED
PUSHJ P,VALFND ;SEE IF WE CAN FIND A SYMBOL
JRST RADTYP ;TYPE ADDR IN CURRENT RADIX
PUSH P,T1 ;SAVE VALUE
MOVE T1,(SYM) ;GET SYMBOL NAME
PUSHJ P,SIXTYP ;TYPE SYMBOL
POP P,T1 ;GET VALUE AGAIN
SUB T1,1(SYM) ;GET DISPLACEMENT
ANDI T1,177777 ;STRIP EXTRA BITS
JUMPE T1,CPOPJ ;IF EXACT WE ARE DONE
PUSH P,T1 ;SAVE REMAINDER
MOVEI T1,"+"
PUSHJ P,TYPCHR
POP P,T1
JRST RADTYP ;TYPE REST IN CURRENT RADIX
;HERE TYPE DATA
DATYPE: HRRZ T5,BYTCNT ;REPETITION COUNT
SETZM LSTADR
SETZM DOTFOO
MOVE T1,DATA ;GET DATA TO TYPE
HRRZ T2,O.MODE ;GET OUTPUT MODE
JRST @[DATINS
DATADR
DATNUM
DATBYT
DATASC
DATEBC
DATR50](T2)
DATNUM: PUSHJ P,RADTYP ;TYPE AS NUMERIC
SOJLE T5,DATYP8
PUSHJ P,BLANKT
JSR NXTDWD ;GET NEXT DATA WORD
JRST DATNUM
NXTDWD: 0
SKIPN DOTFOO ;DONE 2ND WORD YET
MOVE DOTFOO,DOT
ADDI DOTFOO,2
MOVE T1,DOTFOO
PUSHJ P,GETWRD ;FIND WHAT NEXT WORD IS
JRST DATYP8 ;CAN'T READ NEXT WORD !
MOVEM T1,DATA
JRST @NXTDWD
SUBTTL MORE TYPEOUT ROUTINES
;HERE TO TYPE DATA AS AN ADDRESS
DATADR:
PUSHJ P,ADRTYP
SOJLE T5,DATYP8 ;HAVE WE DONE ENOUGH ?
PUSHJ P,BLANKT ;TYPE A SPACE TO SEPERATE FIELDS
JSR NXTDWD ;GET NEXT DATA WORD
JRST DATADR ;AND TYPE NEXT WORD
;HERE TO TYP DATA AS INSTRUCTIONS
DATINS: PUSHJ P,INVLFN ;SEE IF WE CAN FIND AN INSTRUCTION TO MATCH
JRST DATNUM
MOVE T1,(SYM) ;GET INSTRUCTION NAME
PUSHJ P,SIXTYP
MOVE T5,1(SYM) ;GET FLAGS AGAIN
; TLNN T5,SMF.RT!SMF.JS!SMF.DD!SMF.XX!SMF.SS!SMF.SB!SMF.EM ;AND ADDRESS ARGUMENTS ?
; JRST DATYP8 ;NO SO DONE
PUSHJ P,BLANKT ;TYPE A BLANK
TLNE T5,SMF.PL ;SPL TYPE INSTRUCTION ?
JRST [ LDB T1,[POINT 3,DATA,35] ;GET ARGUMENT
PUSHJ P,OCTYPE
JRST DATYP8 ]
TLNE T5,SMF.EM ;EMT TYPE ARGUMENTS ?
JRST [ LDB T1,[POINT 8,DATA,35] ;GET ARGUMENT
PUSHJ P,RADTYP ;TYPE ARGUMENT AS NUMBER
JRST DATYP8 ]
TLNE T5,SMF.RT ;RTS TYPE ?
JRST [ LDB T1,[POINT 3,DATA,35] ;GET REG ADR
PUSHJ P,DATIN9 ;TYPE REG NAME
JRST DATYP8 ]
TLNE T5,SMF.JS ;JSR TYPE ?
JRST [ LDB T1,[POINT 3,DATA,29]
PUSHJ P,DATIN9 ;TYPE REG NAME
PUSHJ P,COMTYP
JRST .+1 ]
TLNE T5,SMF.AS ;ASH TYPE NN ?
JRST [ LDB T1,[POINT 6,DATA,29] ;GET NN
TRNE T1,40 ;CHECK FOR NEGATIVE
IORI T1,177740 ;EXTEND SIGN
JRST RADTYP ]
TLNE T5,SMF.SB ;SOB TYPE ?
JRST [ LDB T1,[POINT 3,DATA,29] ;GET REGISTER
PUSHJ P,DATIN9 ;TYPE REG NAME
PUSHJ P,COMTYP
LDB T1,[POINT 6,DATA,35] ;GET OFFSET
IMULI T1,-2
ADDI T1,2(DOT)
ANDI T1,177777
PUSHJ P,ADRTYP
JRST DATYP8 ]
TLNN T5,SMF.SS ;12BIT SSDD FORMAT ?
JRST DATIN2 ;NO
LDB T4,[POINT 6,DATA,29] ;GET SS CODE
PUSHJ P,DATIN8
PUSHJ P,COMTYP
DATIN2: TLNN T5,SMF.SS!SMF.DD ;IS THERE A 6 BIT DESTINATION CODE ?
JRST DATIN4 ;NO
LDB T4,[POINT 6,DATA,35] ;GET DD CODE
PUSHJ P,DATIN8
DATIN4: TLNN T5,SMF.XX ;IS THIS BR TYPE ADDRESSING ?
JRST DATIN6 ;NO
LDB T1,[POINT 8,DATA,35] ;GET OFFSET
TRNE T1,200 ;CHECK FOR NEGATIVE OFFSET
IORI T1,177400
AOS T1
LSH T1,1 ;MAKE WORD ADDRESS
ADD T1,DOT
ANDI T1,177777 ;16 BITS ONLY
PUSHJ P,ADRTYP ;TYPE ADDRESS
DATIN6: JRST DATYP8
DATIN8: CAIN T4,27 ;CHECK FOR IMMEDIATE MODE
JRST [ PUSHJ P,HSHTYP ;TYPE A #
SKIPN DOTFOO
MOVE DOTFOO,DOT
ADDI DOTFOO,2
MOVE T1,DOTFOO
PUSHJ P,GETWRD
POPJ P,
JRST ADRTYP ]
CAIN T4,37 ;CHECK FOR ABSOLUTE MODE
JRST [ SKIPN DOTFOO
MOVE DOTFOO,DOT
ADDI DOTFOO,2
MOVE T1,DOTFOO
PUSHJ P,GETWRD
POPJ P,
JRST ADRTYP ]
TRNE T4,10 ;CHECK FOR DEFERRED MODE
PUSHJ P,[ MOVEI T1,"@"
PJRST TYPCHR ]
CAIE T4,77 ;CHECK FOR RELATIVE DEFERRED MODE
CAIN T4,67 ;CHECK FOR RELATIVE MODE
JRST [ SKIPN DOTFOO
MOVE DOTFOO,DOT
ADDI DOTFOO,2
MOVE T1,DOTFOO
PUSHJ P,GETWRD
POPJ P,
ADD T1,DOTFOO ;MAKE RELATIVE
ADDI T1,2
JRST ADRTYP ]
LDB T1,[POINT 3,T4,32] ;GET MODE
CAIE T1,4
CAIN T1,5
PUSHJ P,MINTYP
CAIL T1,6 ;CHECK FOR INDEX OR INDEX DEFERRED
JRST [ SKIPN DOTFOO
MOVE DOTFOO,DOT
ADDI DOTFOO,2
MOVE T1,DOTFOO
PUSHJ P,GETWRD
POPJ P,
PUSHJ P,ADRTYP
JRST .+2 ]
TRNE T1,6
PUSHJ P,[ MOVEI T1,"("
PJRST TYPCHR ]
LDB T1,[POINT 3,T4,35] ;GET REGISTER VALUE
PUSHJ P,DATIN9 ;TYPE REGISTER NAME
TRNN T4,60
POPJ P, ;PLAIN REGISTER MODE
MOVEI T1,")"
PUSHJ P,TYPCHR
LDB T1,[POINT 3,T4,32]
CAIE T1,2
CAIN T1,3
PUSHJ P,PLUTYP
POPJ P,
DATIN9: PUSHJ P,RGFNDN ;FIND REGISTERS NAME
JRST [ CAIN T1,6
PJRST TYPSP
CAIN T1,7
PJRST TYPPC
PUSHJ P,PCNTYP ;TYPE A %
PUSHJ P,OCTYPE
POPJ P, ]
MOVE T1,(SYM) ;GET REGISTERS NAME
JRST SIXTYP
;HERE TO TYPE DATA AS ASCII TEXT
DATASC: ANDI T1,377
MOVEM T1,T3
PUSHJ P,DATAS3
SOJLE T5,DATYP8
LDB T1,[POINT 8,DATA,27]
MOVEM T1,T3 ;SAVE IN CASE ILLEGAL
PUSHJ P,DATAS3
SOJLE T5,DATYP8
JSR NXTDWD ;GET NEXT DATA WORD
JRST DATASC
DATAS3: ANDI T1,177 ;STRIP PARITY BIT
CAIL T1,40
CAILE T1,176
CAIA ;SPECIAL HANDLING
JRST TYPCHR ;JUST TYPE CHARACTER
DATAS4: PUSH P,T3 ;SAVE WEIRD CHARACTER
MOVEI T1,"<"
PUSHJ P,TYPCHR
POP P,T1 ;GET CHAR
PUSHJ P,RADTYP
MOVEI T1,">"
PJRST TYPCHR
SUBTTL TYPE DATA AS RAD50 TEXT
;
; T1 HAS VALUE TO BE DECODED
;
DATR50:
IDIVI T1,50 ;LETTER INTO T2
PUSH P,T2 ;SAVE LETTER
IDIVI T1,50 ;SECOND LETTER
PUSH P,T2
MOVE T2,T1
PUSHJ P,DATR5A ;TYPE 1ST LETTER
POP P,T2
PUSHJ P,DATR5A ;AND SECOND
POP P,T2
PUSHJ P,DATR5A ;AND THIRD
POPJ P,
DATR5A:
PUSHJ P,DATR5B ;CONVERT
PUSHJ P,TYPCHR
POPJ P,
DATR5B:
MOVEI T1,40 ;ASSUME SPACE
JUMPE T2,[POPJ P,] ; YES, CORRECT IF ZERO
MOVE T1,T2 ;ASSUME A-Z
ADDI T1,100 ;IN ASCII
CAIG T2,32 ;CHECK IF RIGHT
POPJ P, ; YES
MOVEI T1,"$" ;ASSUME DOLLAR
CAIN T2,33 ;CHECK
POPJ P, ; YES, IS DOLLAR
MOVEI T1,"."
CAIN T2,34
POPJ P, ;YES, IS PERIOD
MOVEI T1,"#" ;UNDEFINED
CAIN T2,35 ; ?
POPJ P, ; YES
MOVE T1,T2
ADDI T1,60-36 ;MAKE INTO ASCII NUMBER
POPJ P,
SUBTTL TYPE DATA AS EBCDIC TEXT
DATEBC: PUSHJ P,DATEB3
SOJLE T5,DATYP8
LDB T1,[POINT 8,DATA,27]
PUSHJ P,DATEB3
SOJLE T5,DATYP8
JSR NXTDWD ;GET NEXT DATA WORD
JRST DATEBC
DATEB3: ANDI T1,377
MOVEM T1,T3
SETZ T2,
LSHC T1,-2
ROT T2,2
LDB T1,[ POINT 8,EB.TRN(T1),7
POINT 8,EB.TRN(T1),15
POINT 8,EB.TRN(T1),23
POINT 8,EB.TRN(T1),31 ](T2)
PJRST DATAS3
;HERE TO TYPE DATA AS BYTES
DATBYT:
ANDI T1,377
PUSHJ P,RADTYP
SOJLE T5,DATYP8
MOVEI T1,","
PUSHJ P,TYPCHR
LDB T1,[POINT 8,DATA,27]
PUSHJ P,RADTYP ;TYPE IN CURRENT RADIX
SOJLE T5,DATYP8
MOVEI T1,","
PUSHJ P,TYPCHR
JSR NXTDWD ;GET NEXT DATA WORD
JRST DATBYT
DATYP8:
MOVEI T1," "
PJRST TYPCHR
SUBTTL TYPE T1 AS NUMBER
DECTYP:
SKIPA T3,[EXP ^D10]
OCTYPE:
MOVEI T3,^D8
JRST RADTY2
RADTYP:
HRRZ T3,ORADIX
CAIE T3,^D10
JRST RADTY2
PUSHJ P,RADTY2
MOVEI T1,"."
PJRST TYPCHR
RADTY2:
RADTY5:
IDIVI T1,(T3)
HRLM T2,(P)
SKIPE T1
PUSHJ P,RADTY5
HLRZ T1,(P)
IORI T1,"0"
CAILE T1,"9"
ADDI T1,7 ;DOING HEX
PJRST TYPCHR
SIXTYP:
MOVEM T1,T2
SXTYP1:
SETZ T1,
LSHC T1,6
ADDI T1,40
PUSHJ P,TYPCHR
JUMPN T2,SXTYP1
POPJ P,
SUBTTL TYPE VARIOUS CHARACTERS
SLTTYP:
PUSH P,T1
MOVEI T1,"/"
PUSHJ P,TYPCHR
CAIA
TABTYP:
PUSH P,T1
MOVEI T1," "
TYPEIT:
PUSHJ P,TYPCHR
POP P,T1
POPJ P,
CRLTYP:
PUSH P,T1
MOVEI T1,15 ;CARRIAGE RETURN
PUSHJ P,TYPCHR
MOVEI T1,12 ;LINEFEED
PJRST TYPEIT
BLANKT:
PUSH P,T1
MOVEI T1," "
PJRST TYPEIT
COMTYP:
PUSH P,T1
MOVEI T1,","
PJRST TYPEIT
PCNTYP:
PUSH P,T1
MOVEI T1,"R"
PJRST TYPEIT
HSHTYP:
PUSH P,T1
MOVEI T1,"#"
PJRST TYPEIT
MINTYP:
PUSH P,T1
MOVEI T1,"-"
PJRST TYPEIT
PLUTYP:
PUSH P,T1
MOVEI T1,"+"
PJRST TYPEIT
;
TYPSP:
PUSH P,T1
MOVEI T1,"S"
PUSHJ P,TYPCHR
MOVEI T1,"P"
PJRST TYPEIT
;
TYPPC:
PUSH P,T1
MOVEI T1,"P"
PUSHJ P,TYPCHR
MOVEI T1,"C"
PJRST TYPEIT
SUBTTL MORE TYPEOUT ROUTINES
TYPCHR:
PUSH P,T1 ;AT ENTRY, T1 HAS CHR TO TYPE
PUSH P,T2
MOVE T2,T1 ;GET CHR
SKIPE LPTFLG ;DOING A DUMP ?
JRST TYPCH3 ;YES
MOVX T1,.PRIOU ;PRIMARY OUTPUT
JRST TYPCH4
TYPCH3:
MOVE T1,OUTJFN
TYPCH4:
BOUT
POP P,T2
POP P,T1
POPJ P,
TSTRNG: ;T2 HAS PTR TO STRING
PUSH P,T1
PUSH P,T3
MOVEI T3,0 ;STRING ASCIZ
HRLI T2,440700 ;BYTE PTR
MOVE T1,OUTJFN ;IN CASE LPT OUTPUT
SKIPN LPTFLG ;ARE WE TO LPT?
MOVX T1,.PRIOU ; NO, PRIMARY OUTPUT
SOUT ;OUTPUT STRING
POP P,T3
POP P,T1
POPJ P,
SUBTTL LOCK CODE
LOCKER: TYPE [ASCIZ \?LOCK UUO failed - code \]
PUSHJ P,OCTYPE
HALTF ;RETURN TO MONITOR
JRST LEVEL0 ;USER TYPED CONTINUE
NODERR: TYPE [ASCIZ \?NODE UUO failed - code \]
PUSHJ P,OCTYPE
HALTF ;RETURN TO MONITOR
JRST LEVEL0 ;USER TYPED CONTINUE
SUBTTL DUMP 11 TO FILE
DUMP:
PUSHJ P,OPNDMP ;OPEN OUTPUT FILE
JRST DUMP9 ; ERROR?
SETOM LPTFLG ;SET TO LPT FLAG
MOVE DOT,SBEGIN ;WHERE TO BEGIN DUMP
JRST DUMP2
DUMP1:
HRRZ T1,DUMPA ;LAST ADDRESS WE TYPED
ADDI T1,20
CAMLE T1,DOT ;TIME TO TYPE ADR AGAIN ?
JRST DUMP4
DUMP2:
PUSHJ P,CRLTYP
PUSHJ P,CRLTYP
HRRZ T1,DOT
PUSHJ P,ADRTYP
PUSHJ P,BLANKT
MOVEI T1,"="
PUSHJ P,TYPCHR
PUSHJ P,BLANKT
HRRZ T1,DOT
PUSHJ P,OCTYPE
MOVEI T1,":"
PUSHJ P,TYPCHR
HRRZ T1,DOT
ANDI T1,177760 ;IN CASE WAS HIGH
MOVEM T1,DUMPA ;REMEMBER LAST ADR WE TYPED
CAIA ;SO WE DO AN EXTRA TAB
DUMP4:
TRNN DOT,7
PUSHJ P,TABTYP
DUMP7:
MOVE T1,DOT ;GET ADDRESS TO EXAMINE
PUSHJ P,GETWRD
JRST DUMP8 ;ALL DONE
MOVEM T1,DATA
PUSHJ P,DATYPE ;DUMP LOCATION
SKIPE DOTFOO
MOVE DOT,DOTFOO
ADDI DOT,2 ;ADVANCE TO NEXT WORD
CAMG DOT,S..END
JRST DUMP1
SUBTTL MORE DUMP TO FILE
DUMP8:
PUSHJ P,CRLTYP
PUSHJ P,CRLTYP
MOVE T1,OUTJFN
CLOSF ;CLOSE THE OUTPUT FILE
JFCL ;DON'T CARE IF FAILED
SETZM LPTFLG ;NOT A DUMP ANYMORE
PUSHJ P,CRLTYP
PUSHJ P,CRLTYP
JRST LEVEL0
DUMP9:
TYPE [ASCIZ \error writing dump\]
PUSHJ P,CRLTYP ;RETURN CARRIAGE
JRST LEVEL0
OPNDMP:
TYPE [ASCIZ /
OUTPUT TO FILE: /]
MOVX T1,<GJ%FOU!GJ%MSG!GJ%CFM!GJ%FNS!GJ%SHT>
MOVE T2,[.PRIIN,,.PRIOU]
GTJFN ;GET JFN
JRST [PUSHJ P,WARN
POPJ P,]
HRRZM T1,OUTJFN ;LPT JFN
MOVE T2,[7B5+OF%WR]
OPENF ;TRY TO OPEN IT
JRST [PUSHJ P,WARN
POPJ P,]
SETOM LPTFLG ;OUTPUT TO LPT FLAG
AOS (P)
POPJ P,
SUBTTL COMPARE FILE WITH WHAT'S IN CORE
;
; COMMAND FORM IS:
; [FROM]<[TO]>$X
; PROGRAM REQUESTS FILE WITH WHICH TO COMPARE,
; AND THEN REQUESTS OUTPUT FILE
;
; WE THEN READ THE INPUT FILE INTO SOME BUFFER,
; AND COMPARE IT WITH THE PDP-11 BUFFER, AND
; OUTPUT THE DIFFERENCES TO THE OUTPUT FILE.
;
RDCMPR: ;READ AND COMPARE
PUSHJ P,CRLTYP ;RETURN CARRIAGE
SKIPN MEMORY ;MEMORY?
JRST [TYPE [ASCIZ \?FEDDT - NO PDP-11 MEMORY\]
PUSHJ P,CRLTYP
JRST LEVEL0]
PROMPT [ASCIZ \COMPARE WITH FILE: \]
PUSHJ P,OPNFIL ;OPEN INPUT FILE
JRST LEVEL0 ;FAILED
PUSH P,MEMORY ;SAVE MEMORY LOC
PUSH P,MEMLIM ;.END OF MEM TOO
PUSH P,S..END ;..ALSO SEARCH END
MOVEI T5,CMPBLK ;...COMPARE BLOCK
PUSHJ P,RDDMP ;...READ DUMP
JFCL ;...FAILED?
POP P,S..END ;...RESTORE OLD CORE
POP P,MEMLIM ;..
POP P,MEMORY ;.
RDCMP0:
PUSHJ P,OPNDMP ;OPEN OUTPUT FILE
JRST LEVEL0 ;FAILED
SETOM LPTFLG ;SET TO LPT FLAG
SKIPN MEMORY ;IN CASE FROM $X
JRST ILLCHR ;SO DING IF NO MEMORY
MOVE DOT,SBEGIN ;START ADDR
MOVE T3,DOT ;SET UP SOURCE 2
LSH T3,-2 ;INTO COMPARE BLOCK
ADD T3,[442200,,CMPBLK]
RDCMP1:
MOVE T1,DOT ;GET FROM CORE
PUSHJ P,GETWRD ;GET WORD FROM 11
JRST RDCMP9 ;FAILED?
MOVEM T1,DATA ;SAVE AS DATA
ILDB T4,T3 ;COMPARE FILE
CAME T4,DATA ;SAME AS FILE?
JRST RDCMP3 ; NO, WORRY
RDCMP2:
ADDI DOT,2 ; YES, ALL OK
CAMG DOT,S..END ;CHECK
JRST RDCMP1 ;NOT DONE YET
RDCMP9: ;
MOVE T1,OUTJFN ;OUTPUT JFN
SETZM LPTFLG ;CLEAR TO LPT FLAG
CLOSF ;CLOSE OUTPUT FILE
PUSHJ P,WARN ;TELL USER WE LOST
PUSHJ P,CRLTYP
JRST LEVEL0 ;AND RETURN
RDCMP3: ;HERE WHEN CORE NOT EQUAL TO FILE
PUSH P,T3 ;SAVE BYTE PTR
MOVE T1,DOT ;GET ADDRESS
PUSHJ P,ADRTYP ;TYPE ADDRESS
PUSHJ P,SLTTYP ;TYPE SLASH TAB
PUSHJ P,DATYPE ;TYPE DATA TO USER
PUSHJ P,TABTYP ;TAB OVER
MOVEM T4,DATA ;STORE FILE VERSION
PUSHJ P,DATYPE
PUSHJ P,CRLTYP ;RETURN CARRIAGE
POP P,T3 ;RESTORE BYTE PTR
JRST RDCMP2 ;AND GO ON
SUBTTL READ BINARY CORE DUMP FILE
RDDUMP:
PROMPT [ASCIZ /
INPUT FILE: /]
PUSHJ P,OPNFIL
JRST LEVEL0 ;FAILED, SO GO AWAY
MOVEI T5,MEMBLK ;GET FIRST FREE LOCATION
PUSHJ P,RDDMP ;READ BINARY FILE
JRST LEVEL0 ;FAILED?
MOVEI T1,LEVELR ;NOW CHANGE STARTUP ADDRESS
MOVEM T1,.JBSA ;SO WE DON'T AUTO-CLOBBER
JRST LEVEL0 ;WON!
SUBTTL MORE READ BINARY DUMP
RDDMP:
MOVEM T5,MEMORY ;SAVE ADDRESS OF SIMULATED MEMORY
SETZM MEMLIM ;FIRST NONEXISTENT ADDRESS IN DUMP MEMORY
RDUMP0:
MOVE T5,MEMORY ;GET ADDR OF MEMORY
RDUMP1:
MOVE T1,INJFN ;GET INPUT JFN
SIZEF ;GET SIZE OF FILE IN WORDS
JRST WARN ;LOST
MOVNS T3,T2 ;I/O WORD FORMAT
MOVE T1,INJFN ;INPUT JFN
MOVEI T2,MEMPTR ;COMMAND LIST FOR DUMPI
HRRM T5,MEMPTR ;POINT TO MEMORY
HRLM T3,MEMPTR ;NEG SIZE TO READ
SOS MEMPTR ;IOWRD PTR
DUMPI ;DUMP MODE INPUT
PJRST WARN ;COMPLAIN TO LOSER
HLRE T3,MEMPTR ;GET MEMORY SIZE
MOVN T3,T3 ;NEGATE I/O PTR
ADD T3,MEMORY ;ADD MEMORY PTR
MOVE T5,T3
RDUMP9: ;END OF DUMP
MOVE T1,INJFN ;GET JFN OF INPUT FILE
CLOSF ;CLOSE FILE
PJRST WARN ;FAILED, COMPLAIN
ADDI T5,3 ;MULTIPLE OF 4
TRZ T5,3 ;MULTIPLE OF 4
HRRM T5,S..END ;END FOR SEARCHES
HRRM T5,MEMLIM ;UPPER LIMIT
TYPE [ASCIZ \CORE SIZE IS \]
MOVE T1,MEMLIM
SUB T1,MEMORY ;PDP-11 ADDRESS, PLEASE
LSH T1,-11 ;REDUCED TO K
PUSHJ P,DECTYP ;IN DECIMAL
TYPE [ASCIZ \K\]
PUSHJ P,CRLTYP
AOS (P) ;SKIP RETURN
POPJ P,
SUBTTL EBCDIC TO ASCII
;TRANSLATION TABLE FROM EBCDIC TO ASCII
EB.TRN: BYTE (8)000,001,002,003,000,011,000,177 ;000-007
BYTE (8)000,000,000,013,014,015,000,000 ;010-017
BYTE (8)000,021,022,000,000,000,000,000 ;020-027
BYTE (8)000,000,000,000,000,000,000,000 ;030-037
BYTE (8)000,000,000,000,000,000,000,000 ;040-047
BYTE (8)000,000,000,000,000,000,000,000 ;050-057
BYTE (8)000,000,000,000,000,000,000,000 ;060-067
BYTE (8)000,000,000,000,000,000,000,000 ;070-077
BYTE (8)040,000,000,000,000,000,000,000 ;100-107
BYTE (8)000,000,000,056,074,050,053,136 ;110-117
BYTE (8)046,000,000,000,000,000,000,000 ;120-127
BYTE (8)000,000,041,044,052,051,073,155 ;130-137
BYTE (8)055,057,000,000,000,000,000,000 ;140-147
BYTE (8)000,000,174,054,045,137,076,077 ;150-157
BYTE (8)000,000,000,000,000,000,000,000 ;160-167
BYTE (8)000,140,072,043,100,047,075,042 ;170-177
BYTE (8)075,141,142,143,144,145,146,147 ;200-207
BYTE (8)150,151,000,000,000,000,000,000 ;210-217
BYTE (8)000,152,153,154,155,156,157,160 ;220-227
BYTE (8)161,162,000,000,000,000,000,000 ;230-237
BYTE (8)100,176,163,164,165,166,167,170 ;240-247
BYTE (8)171,172,134,116,153,133,113,141 ;250-257
BYTE (8)060,061,062,063,064,065,066,067 ;260-267
BYTE (8)070,071,172,136,114,135,156,157 ;270-277
BYTE (8)173,101,102,103,104,105,106,107 ;300-307
BYTE (8)110,111,000,000,000,000,000,000 ;310-317
BYTE (8)175,112,113,114,115,116,117,120 ;320-327
BYTE (8)121,122,000,000,000,000,000,000 ;330-337
BYTE (8)134,000,123,124,125,126,127,130 ;340-347
BYTE (8)131,132,000,000,000,000,000,000 ;350-357
BYTE (8)060,061,062,063,064,065,066,067 ;360-367
BYTE (8)070,071,174,000,000,000,000,000 ;370-377
REPEAT 0,<
EXP LOOP,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;00-07
EXP ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;10-17
EXP ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;20-27
EXP ILLCHR,ILLCHR,COMCZ ,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;30-37
EXP ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;40-47
EXP ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;50-57
EXP ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;60-67
EXP ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;70-77
EXP ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;100-107
EXP ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;110-117
EXP ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;120-127
EXP ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;130-137
EXP ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;140-147
EXP ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;150-157
EXP ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;160-167
EXP ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,COMRUB ;170-177
>
SUBTTL STATE TABLES
STATE0: EXP LOOP ,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;00-07
EXP COMARR,COMHT ,COMLF ,ILLCHR,ILLCHR,LEVEL0,ILLCHR,ILLCHR ;10-17
EXP ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;20-27
EXP EXPXOR,ILLCHR,COMCZ ,ESCAPE,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;30-37
EXP ILLCHR,ILLCHR,ILLCHR,ILLCHR,ASSYMB,ILLCHR,ILLCHR,ILLCHR ;40-47
EXP ILLCHR,ILLCHR,ILLCHR,EXPLUS,ILLCHR,EXPMIN,ASSYMB,ILLCHR ;50-57
EXP ASSNUM,ASSNUM,ASSNUM,ASSNUM,ASSNUM,ASSNUM,ASSNUM,ASSNUM ;60-67
EXP ASSNUM,ASSNUM,ILLCHR,ILLCHR,ILLCHR,EQUALS,ILLCHR,ILLCHR ;70-77
EXP ILLCHR,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB ;100-107
EXP ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB ;110-117
EXP ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB ;120-127
EXP ASSYMB,ASSYMB,ASSYMB,ILLCHR,COMBSL,ILLCHR,COMARR,ILLCHR ;130-137
EXP ILLCHR,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB ;140-147
EXP ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB ;150-157
EXP ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB ;160-167
EXP ASSYMB,ASSYMB,ASSYMB,ILLCHR,ILLCHR,ILLCHR,ILLCHR,COMRUB ;170-177
;STATE TABLE WHEN BUILDING AN EXPRESSION
STATEE: EXP LOOP ,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;00-07
EXP ILLCHR,ILLCHR,STELF ,ILLCHR,ILLCHR,STECR ,ILLCHR,ILLCHR ;10-17
EXP ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;20-27
EXP EXPXOR,ILLCHR,COMCZ ,ESCEXP,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;30-37
EXP EXPLUS,EXPIOR,ILLCHR,ILLCHR,ASSYMB,ILLCHR,EXPAND,EXPDIV ;40-47
EXP ILLCHR,ILLCHR,EXPMUL,EXPLUS,ILLCHR,EXPMIN,ASSYMB,OPNLOC ;50-57
EXP ASSNUM,ASSNUM,ASSNUM,ASSNUM,ASSNUM,ASSNUM,ASSNUM,ASSNUM ;60-67
EXP ASSNUM,ASSNUM,DEFSYM,ILLCHR,SLOWLM,EXPEQU,SUPLIM,ILLCHR ;70-77
EXP ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB ;100-107
EXP ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB ;110-117
EXP ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB ;120-127
EXP ASSYMB,ASSYMB,ASSYMB,ILLCHR,COMBSE,ILLCHR,STEARR,BKARRW ;130-137
EXP ILLCHR,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB ;140-147
EXP ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB ;150-157
EXP ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB,ASSYMB ;160-167
EXP ASSYMB,ASSYMB,ASSYMB,ILLCHR,ILLCHR,ILLCHR,ILLCHR,COMRUB ;170-177
;STATE TABLE WHEN USER TYPES ALTMODE
STATSC: EXP LOOP,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;00-07
EXP ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;10-17
EXP ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;20-27
EXP ILLCHR,ILLCHR,COMCZ ,ESCESC,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;30-37
EXP ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;40-47
EXP ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;50-57
EXP ESC..0,ESC..0,ESC..0,ESC..0,ESC..0,ESC..0,ESC..0,ESC..0 ;60-67
EXP ESC..0,ESC..0,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;70-77
EXP ILLCHR,ESC..A,ESC..B,ESC..C,ESC..D,ESC..E,ILLCHR,ILLCHR ;100-107
EXP ILLCHR,ESC..I,ILLCHR,ESC..K,ILLCHR,ESC..M,ESC..N,ESC..O ;110-117
EXP ESC..P,ILLCHR,ESC..R,ESC..S,ESC..T,ILLCHR,ESC..V,ESC..W ;120-127
EXP ESC..X,ESC..Y,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR ;130-137
EXP ILLCHR,ESC..A,ESC..B,ESC..C,ESC..D,ESC..E,ILLCHR,ILLCHR ;140-147
EXP ILLCHR,ESC..I,ILLCHR,ILLCHR,ILLCHR,ESC..M,ESC..N,ILLCHR ;150-157
EXP ILLCHR,ILLCHR,ESC..R,ESC..S,ESC..T,ILLCHR,ESC..V,ESC..W ;160-167
EXP ILLCHR,RDSYMB,ILLCHR,ILLCHR,ILLCHR,ILLCHR,ILLCHR,COMRUB ;170-177
SWLIST: SIXBIT \FILE\
SIXBIT \NODE\
SIXBIT \PATCH\
SIXBIT \PORT\
Z
LIT
VAR
DEFINE X (VAL,BIT,NAME,FLAG) <
EXP .+1
SIXBIT \NAME\
BYTE (5)BIT(13)FLAG(18)VAL
>;END OF DEFINE X
SYMBEG: X 000000,^D16,HALT,<SMF.IN>
X 000001,^D16,WAIT,<SMF.IN>
X 000002,^D16,RTI,<SMF.IN>
X 000003,^D16,BPT,<SMF.IN>
X 000004,^D16,IOT,<SMF.IN>
X 000005,^D16,RESET,<SMF.IN>
X 000006,^D16,RTT,<SMF.IN>
X 000100,^D10,JMP,<SMF.IN!SMF.DD>
X 000200,^D13,RTS,<SMF.IN!SMF.RT>
X 000230,^D13,SPL,<SMF.IN!SMF.PL>
X 000240,^D16,NOP,<SMF.IN>
X 000241,^D16,CLC,<SMF.IN>
X 000242,^D16,CLV,<SMF.IN>
X 000244,^D16,CLZ,<SMF.IN>
X 000250,^D16,CLN,<SMF.IN>
X 000257,^D16,CCC,<SMF.IN>
X 000261,^D16,SEC,<SMF.IN>
X 000262,^D16,SEV,<SMF.IN>
X 000264,^D16,SEZ,<SMF.IN>
X 000270,^D16,SEN,<SMF.IN>
X 000277,^D16,SCC,<SMF.IN>
X 000300,^D10,SWAB,<SMF.IN!SMF.DD>
X 000400,^D8,BR,<SMF.IN!SMF.XX>
X 001000,^D8,BNE,<SMF.IN!SMF.XX>
X 001400,^D8,BEQ,<SMF.IN!SMF.XX>
X 002000,^D8,BGE,<SMF.IN!SMF.XX>
X 002400,^D8,BLT,<SMF.IN!SMF.XX>
X 003000,^D8,BGT,<SMF.IN!SMF.XX>
X 003400,^D8,BLE,<SMF.IN!SMF.XX>
X 004000,^D7,JSR,<SMF.IN!SMF.DD!SMF.JS>
X 005000,^D10,CLR,<SMF.IN!SMF.DD>
X 005100,^D10,COM,<SMF.IN!SMF.DD>
X 005200,^D10,INC,<SMF.IN!SMF.DD>
X 005300,^D10,DEC,<SMF.IN!SMF.DD>
X 005400,^D10,NEG,<SMF.IN!SMF.DD>
X 005500,^D10,ADC,<SMF.IN!SMF.DD>
X 005600,^D10,SBC,<SMF.IN!SMF.DD>
X 005700,^D10,TST,<SMF.IN!SMF.DD>
X 006000,^D10,ROR,<SMF.IN!SMF.DD>
X 006100,^D10,ROL,<SMF.IN!SMF.DD>
X 006200,^D10,ASR,<SMF.IN!SMF.DD>
X 006300,^D10,ASL,<SMF.IN!SMF.DD>
X 006700,^D10,SXT,<SMF.IN!SMF.DD>
X 010000,^D4,MOV,<SMF.IN!SMF.SS>
X 020000,^D4,CMP,<SMF.IN!SMF.SS>
X 030000,^D4,BIT,<SMF.IN!SMF.SS>
X 040000,^D4,BIC,<SMF.IN!SMF.SS>
X 050000,^D4,BIS,<SMF.IN!SMF.SS>
X 060000,^D4,ADD,<SMF.IN!SMF.SS>
X 070000,^D7,MUL,<SMF.IN!SMF.JS!SMF.DD>
X 071000,^D7,DIV,<SMF.IN!SMF.JS!SMF.DD>
X 072000,^D7,ASH,<SMF.IN!SMF.JS>
X 073000,^D7,ASHC,<SMF.IN!SMF.JS>
X 074000,^D7,XOR,<SMF.IN!SMF.JS!SMF.DD>
X 075000,^D13,FADD,<SMF.IN!SMF.RT>
X 075010,^D13,FSUB,<SMF.IN!SMF.RT>
X 075020,^D13,FMUL,<SMF.IN!SMF.RT>
X 075030,^D13,FDIV,<SMF.IN!SMF.RT>
X 077000,^D7,SOB,<SMF.IN!SMF.SB>
X 100000,^D8,BPL,<SMF.IN!SMF.XX>
X 100400,^D8,BMI,<SMF.IN!SMF.XX>
X 101000,^D8,BHI,<SMF.IN!SMF.XX>
X 101400,^D8,BLOS,<SMF.IN!SMF.XX>
X 102000,^D8,BVC,<SMF.IN!SMF.XX>
X 102400,^D8,BVS,<SMF.IN!SMF.XX>
X 103000,^D8,BCC,<SMF.IN!SMF.XX>
X 103000,^D8,BHIS,<SMF.IN!SMF.XX>
X 103400,^D8,BCS,<SMF.IN!SMF.XX>
X 103400,^D8,BLO,<SMF.IN!SMF.XX>
X 104000,^D8,EMT,<SMF.IN!SMF.EM>
X 104400,^D8,TRAP,<SMF.IN!SMF.EM>
X 105000,^D10,CLRB,<SMF.IN!SMF.DD>
X 105100,^D10,COMB,<SMF.IN!SMF.DD>
X 105200,^D10,INCB,<SMF.IN!SMF.DD>
X 105300,^D10,DECB,<SMF.IN!SMF.DD>
X 105400,^D10,NEGB,<SMF.IN!SMF.DD>
X 105500,^D10,ADCB,<SMF.IN!SMF.DD>
X 105600,^D10,SBCB,<SMF.IN!SMF.DD>