mirror of
https://github.com/PDP-10/its.git
synced 2026-01-24 11:22:36 +00:00
disk parameters to separate file (system;rp04 >) from system;rh10 >. Made build default to RP04 when RH10 is specified, but switches can select RP06 for relevant components. Resolves #1648.
2861 lines
47 KiB
Plaintext
2861 lines
47 KiB
Plaintext
;-*-MIDAS-*-
|
||
;;; Copyright (c) 1999 Massachusetts Institute of Technology
|
||
;;; See the COPYING file at the top-level directory of this project.
|
||
|
||
subttl ddt conditional assembly
|
||
|
||
define setf text,flg
|
||
ifdef flg,.stop
|
||
.tag foobar
|
||
printc "text
|
||
flg="
|
||
.ttymac flag
|
||
.ttyflg==.ttyflg+1
|
||
printx/flag
|
||
/
|
||
.ttyflg==.ttyflg-1
|
||
ifse flag,YES,flg==1
|
||
ifse flag,NO,flg==0
|
||
ifse flag,Y,flg==1
|
||
ifse flag,N,flg==0
|
||
ifndef flg,flg==flag
|
||
termin
|
||
ifndef flg,.go foobar
|
||
termin
|
||
|
||
setf [CPU (0 KA, 1 KI, 2 KL, 3 KS, 4 TS)]cpusw ;KI not supported
|
||
define ka
|
||
ife cpusw!termin
|
||
define ki
|
||
ife cpusw-1!termin
|
||
define kl
|
||
ife cpusw-2!termin
|
||
define ks
|
||
ife cpusw-3!termin
|
||
define ts
|
||
ife cpusw-4!termin
|
||
define nts
|
||
ifn cpusw-4!termin
|
||
define tks
|
||
ife <cpusw-3>*<cpusw-4>!termin
|
||
|
||
dpysw==:0 ; Obsolete
|
||
setf 340?,dpysw ;0 no display
|
||
;1 340 display
|
||
define nodpy
|
||
ife dpysw!termin
|
||
define dpy340
|
||
ife dpysw-1!termin
|
||
|
||
TKS, ndsk==:0 ? dsksw==:0 ; No disk code for TS or KS version
|
||
|
||
setf Number of disks? (0 no swapping and file system goodies),ndsk
|
||
define swap
|
||
ifn ndsk!termin
|
||
define noswap
|
||
ife ndsk!termin
|
||
swap,lowlen==2200 ;disk routines take a little extra room
|
||
|
||
setf [Type of disk? (0 none, 1 Systems Concepts, 2 RP-10, 3 RH-10)]dsksw
|
||
define nodsk
|
||
ife dsksw!termin
|
||
define scdsk
|
||
ife dsksw-1!termin
|
||
define rp10
|
||
ife dsksw-2!termin
|
||
define rh10
|
||
ife dsksw-3!termin
|
||
|
||
ifdef rh10,[
|
||
setf [Disk model? (0 RP04, 1 RP06)]dsktp
|
||
define RP04P
|
||
ife dsktp!termin
|
||
define RP06P
|
||
ife dsktp-1!termin
|
||
]
|
||
|
||
ifndef moby, moby==740000 ;256k ddt (memsiz-40000)
|
||
ifndef lowlen, lowlen==1000 ;size of low code
|
||
|
||
lptp==:0 ; Obsolete
|
||
setf Old Type Data Products Line Printer?,lptp
|
||
|
||
MCDMPF==:0 ; Obsolete
|
||
setf [Assemble for MACDMP? (If no, DSKDMP)]mcdmpf
|
||
|
||
TKS, SETF New One Proceed? (Using 1-proceed microcode),KS1PR
|
||
IFNDEF KS1PR, KS1PR==:0
|
||
|
||
IFN KS1PR, 1PRSW==:0 ; Only one kind of one proceed please
|
||
setf Old One Proceed?,1PRSW
|
||
|
||
subttl assignments and definitions
|
||
|
||
TITLE DDT
|
||
|
||
LOC 34000+MOBY
|
||
|
||
DDT:
|
||
|
||
MEMSIZ=40000+MOBY ;INITIAL $I-2
|
||
NLEVS==7 ;LENGTH OF RING BUFFER OF .
|
||
|
||
F=0 ;FLAGS
|
||
P=1 ;PUSH DOWN
|
||
R=2 ;POINTERS TO TABLES, CORE, ETC.
|
||
S=3
|
||
W=4 ;CONTAINS DISPATCH ADDRESS IN WORD ASSEMBLER
|
||
T=5 ;TRANSFER DATA
|
||
W1=6
|
||
W2=7
|
||
I=10 ;SWAP TYPEOUT VARIABLES BETWEEN DISPLAY AND TTY
|
||
A=R
|
||
B=S
|
||
C=W
|
||
D=T
|
||
|
||
NBP==10 ;NUMBER OF BREAK POINTS
|
||
PRS==4
|
||
LPDL==50 ;MAX LENGTH PUSH DOWN LIST
|
||
|
||
TS, CHTTYI==:1 ? CHTTYO==:2
|
||
|
||
TKS, .INSRT DSK:SYSTEM;KSDEFS >
|
||
|
||
;GET DEFINITIONS OF DTE20 LOCATIONS IN LOW CORE
|
||
KL, .INSRT SYSTEM; EPT >
|
||
KL, SWPUA=701540,, ;SWEEP-CACHE INSTRUCTION
|
||
|
||
IF2 LOC LOW
|
||
|
||
SQUOZE 0,DDT ;initial symbols are for program name "DDT"
|
||
-NSYMS,,1
|
||
|
||
NUMSYM==1
|
||
IRP A,,[CLEAR,CLEARI,CLEARM
|
||
CLEARB,CONSZ,CONSO,DATAI,DATAO,BLKI,BLKO,CONI,CONO]
|
||
SQUOZE 4,A
|
||
A
|
||
NUMSYM==NUMSYM+1
|
||
TERMIN
|
||
|
||
MTC==340 ;magtape control
|
||
MTS==344 ;magtape status
|
||
PI==004
|
||
|
||
ka,[
|
||
DC0==610 ;THIS STUFF REALLY WANTS TO CONDITONALIZED ON DISK CONTROL
|
||
DC1==614
|
||
DPK==604
|
||
DPC==250
|
||
|
||
PTP==100 ;paper tape punch
|
||
PTR==104 ;paper tape reader
|
||
TTY==120 ;console terminal
|
||
LPT==124 ;line printer
|
||
DIS==130 ;340 display
|
||
DC==200 ;deselection device?
|
||
UTC==210 ;dectape control
|
||
UTS==214 ;dectape status
|
||
|
||
IRP A,,[PI,PTP,PTR,TTY,LPT,DIS,DC,UTC,UTS,DC0,DC1,DPK,MTC,MTS,DPC]
|
||
SQUOZE 4,A
|
||
<BLKI A,>-BLKI
|
||
NUMSYM==NUMSYM+1
|
||
TERMIN
|
||
];ka
|
||
|
||
kl,[
|
||
PAG==10 ;"PAGER"
|
||
CCA==14 ;"CACHE SWEEPER"
|
||
TIM==20 ;"TIMER"
|
||
MTR==24 ;"METER"
|
||
DSK==270 ;RH10
|
||
|
||
IRP A,,[PI,PAG,CCA,TIM,MTR,MTC,MTS,DSK]
|
||
SQUOZE 4,A
|
||
<BLKI A,>-BLKI
|
||
NUMSYM==NUMSYM+1
|
||
TERMIN
|
||
];kl
|
||
|
||
TKS,[
|
||
PAG==10 ; Paging
|
||
.RD.==20 ; Read various kludges
|
||
.WR.==24 ; Write various kludges
|
||
|
||
IRP A,,[PI,PAG,.RD.,.WR.]
|
||
SQUOZE 4,A
|
||
<BLKI A,>-BLKI
|
||
NUMSYM==NUMSYM+1
|
||
TERMIN
|
||
];TKS
|
||
|
||
SWAP,[ SQUOZE 4,$QACT ;DDT'S DISK-ACTIVE FLAG WORDS
|
||
QACT
|
||
NUMSYM==NUMSYM+1
|
||
]
|
||
|
||
DEFINE BUST A
|
||
SQUOZE 4,$!A!B
|
||
B1ADR+A*3-3
|
||
NUMSYM==NUMSYM+1
|
||
TERMIN
|
||
|
||
SQUOZE 4,..START
|
||
STARTA
|
||
SQUOZE 4,$M
|
||
MSK
|
||
SQUOZE 4,$I
|
||
SAVPI
|
||
SQUOZE 4,DDT
|
||
DDT
|
||
|
||
NUMSYM==NUMSYM+4
|
||
|
||
RADIX 10.
|
||
REPEAT NBP+1,BUST \.RPCNT
|
||
RADIX 8
|
||
|
||
DEFINE INFORM A,B
|
||
IF1,[ PRINTX /A = B
|
||
/]
|
||
TERMIN
|
||
|
||
INFORM [INITIAL SYMS]\NUMSYM*2
|
||
LOC DDT-LOWLEN
|
||
LOWCOD: INFORM [LOWCODE]\.
|
||
|
||
SWAP,[
|
||
.insrt ddtdsk >
|
||
]
|
||
|
||
subttl display routines
|
||
|
||
dpy340,[
|
||
NREGS=10.
|
||
NUMREG=11.
|
||
|
||
;INITIALIZE DISPLAY (CALLED UNCONDITIONALLY WHEN DDT FIRST STARTED UP)
|
||
|
||
DISINI: PUSH P,R
|
||
SKIPN DISON ;SKIP IF DISPLAY ON
|
||
SKIPA R,CJLP1 ;JRST LLUP1
|
||
MOVSI R,(TRNA)
|
||
MOVEM R,LLUPI1
|
||
JUMPGE R,DISIN1 ;JUMP IF <JRST LLUP1> JUST MUNGED INTO LLUPI1
|
||
;FOLLOWING CIDING SKIPPED IF DISPLAY OFF
|
||
HRRZ T,ESTUT
|
||
SUBI T,NUMREG*<NREGS*2+1>+3
|
||
HRRM T,DISWD
|
||
MOVE R,[REPEAT 6,[35]]
|
||
MOVEM R,(T)
|
||
HRLI R,(T)
|
||
HRRI R,1(T)
|
||
BLT R,NUMREG*<2*NREGS+1>-1+1(T)
|
||
MOVNI R,NREGS+1
|
||
MOVEM R,DISCNT
|
||
PUSHJ P,RECYC
|
||
MOVEI T,DISBEG
|
||
MOVEM T,DISPDL
|
||
SETCM T,.-1
|
||
MOVNM T,DISACS+P
|
||
DISIN1: POP P,R
|
||
POPJ P,
|
||
|
||
DISDON: 0
|
||
DISPTR: 0 ;BLKO POINTER FOR DISPLAY
|
||
DISCC: 0
|
||
DISPNR: 0
|
||
DISON: -1 ;DISPLAY FEATURE INITIALLY ON
|
||
DISWD: -NUMREG*<2*NREGS+1>,,
|
||
DTOC: IDIVI T,8 ;CANT CALL TOC OR TOUT. SCREWS DISPLAY.
|
||
HRLM W1,(P)
|
||
SKIPE T
|
||
PUSHJ P,DTOC
|
||
HLRZ T,(P)
|
||
ADDI T,"0
|
||
|
||
DISAD: PUSH P,T
|
||
ANDI T,177
|
||
CAIL T,40
|
||
CAILE T,132
|
||
JRST DISAD2
|
||
DISAD0: IDPB T,DISPNR
|
||
AOS DISCC
|
||
HRRI T,-10.
|
||
SKIPGE T
|
||
MOVEM T,DISCC
|
||
JRST POPTJ
|
||
|
||
|
||
DISAD2: PUSH P,W1
|
||
CAIL T,40
|
||
CAILE T,140
|
||
JRST DISAD5
|
||
MOVEI W1,36
|
||
IDPB W1,DISPNR
|
||
MOVE W1,BLOBS-133(T)
|
||
IDPB W1,DISPNR
|
||
MOVEI T,35
|
||
POP P,W1
|
||
JRST DISAD0
|
||
|
||
DISAD3: MOVEI T,34
|
||
PUSH P,T
|
||
JRST DISAD0
|
||
|
||
DISAD7: PUSHJ P,DISAD3
|
||
DISAD4: MOVNI T,-33
|
||
PUSH P,T
|
||
JRST DISAD0
|
||
|
||
DISAD6: MOVEI T,35
|
||
PUSH P,T
|
||
JRST DISAD0
|
||
|
||
BLOBS: 53
|
||
52
|
||
54
|
||
46
|
||
51
|
||
50
|
||
|
||
DISAD5: PUSHJ P,DIS69
|
||
PUSHJ P,DTOC
|
||
PUSHJ P,DIS69
|
||
POP P,W1
|
||
JRST POPTJ
|
||
|
||
DIS69: IRP X,,[36,50,35]
|
||
MOVEI W1,X
|
||
IDPB W1,DISPNR
|
||
TERMIN
|
||
POPJ P,
|
||
DISLP: AOS T,DISCNT
|
||
CAILE T,NREGS
|
||
DISBEG: MOVNI T,NREGS
|
||
MOVEM T,DISCNT
|
||
ADDI T,NREGS
|
||
IMULI T,NUMREG
|
||
ADD T,DISWD
|
||
HRLI T,600
|
||
MOVEM T,DISPNR
|
||
MOVEM T,DISPN1
|
||
MOVE R,DISCNT
|
||
PUSHJ P,DISAD7
|
||
JUMPE R,.+2
|
||
SOJN R,.+2
|
||
PUSHJ P,DISAD4
|
||
MOVE T,DISCNT
|
||
ADD T,LLOC
|
||
PUSH P,T
|
||
PUSHJ P,PAD
|
||
XCT "/,CRF
|
||
XCT CRF
|
||
SKIPG DISCC
|
||
JRST .-2
|
||
POP P,R
|
||
PUSHJ P,FETCH
|
||
JRST DISL1
|
||
PUSHJ P,CONSYM
|
||
DISL2: PUSHJ P,DISAD6
|
||
MOVE T,DISPNR
|
||
TLNE T,770000
|
||
JRST DISL2
|
||
SUB T,DISPN1
|
||
HRREI T,-NUMREG(T)
|
||
JUMPL T,DISL2
|
||
PUSHJ P,CHECK
|
||
AOSE DISDON
|
||
JRST .-2
|
||
JRST DISLP
|
||
DISL1: XCT "-,CRF
|
||
JRST DISL2
|
||
DISCFT: SOS (P)
|
||
SOS (P)
|
||
SKIPN DISON
|
||
POPJ P,
|
||
DPYSWP: PUSH P,LLUP1
|
||
MOVEI 17,ACSTG(I)
|
||
BLT 17,ACSTG+7(I)
|
||
XCT DISSW(I)
|
||
TLC T,(CONSO#CONSZ)
|
||
MOVEM T,LLUPI1
|
||
XORI I,DIS2-DIS1
|
||
MOVSI 17,ACSTG(I)
|
||
BLT 17,7
|
||
POP P,LLUP1
|
||
POPJ P,
|
||
|
||
CHECK: CONSO DIS,200
|
||
JRST CHECK1
|
||
BLKO DIS,DISPTR
|
||
PUSHJ P,RECYC
|
||
CHECK1: XCT LLUPI1 ;JRST LLUP1 (IF OFF) OR TRNA (ALWAYS SKIP, VALUE OF WORD NEGATIVE)
|
||
JRST DPYSWP
|
||
POPJ P,
|
||
RECYC: MOVEM T,DISPTR
|
||
MOVEI T,40
|
||
SOJG T,.
|
||
CONO DIS,100
|
||
DATAO DIS,[20157,,261777]
|
||
MOVE T,DISWD
|
||
EXCH T,DISPTR
|
||
SETOM DISDON
|
||
POPJ P,
|
||
];dpy340
|
||
|
||
subttl ddt low code
|
||
|
||
IIN: PUSHJ P,IN
|
||
CAIE T,177
|
||
POPJ P,
|
||
JRST ERR
|
||
|
||
LCT: PUSHJ P,TSPC
|
||
PUSHJ P,TSPC
|
||
TSPC: MOVEI T,40 ;SPACE
|
||
JRST TOUT
|
||
|
||
TYOI: 0
|
||
MOVE T,TYOI
|
||
LDB T,[270600+T,,-1]
|
||
PUSH P,TYOI
|
||
JRST TOUT
|
||
|
||
LISTEN:
|
||
TS,[
|
||
SKIPE INSW
|
||
POPJ P,
|
||
.LISTEN T,
|
||
JUMPE T,CPOPJ
|
||
PUSHJ P,TYI
|
||
.LOSE
|
||
];TS
|
||
NTS,[
|
||
SKIPN INSW
|
||
PUSHJ P,TYI
|
||
POPJ P,
|
||
];NTS
|
||
CAIE T,^B
|
||
CAIN T,^E
|
||
JRST TYO2
|
||
CAIE T,^V
|
||
CAIN T,^W
|
||
JRST TYO2
|
||
JRST CPOPJ1
|
||
|
||
IN: SKIPE INSW
|
||
JRST @INSW ;ANOTHER IO ROUTINE PROVIDED, USE IT. (IT SHOULD POPJ 1,)
|
||
ILDB T,MACCR
|
||
JUMPN T,IN2
|
||
SETZM MACCR
|
||
dpy340,[
|
||
CONSO TTY,40
|
||
PUSHJ P,DISCFT
|
||
PUSHJ P,TYI
|
||
JFCL
|
||
];dpy340
|
||
nodpy,[
|
||
PUSHJ P,TYI
|
||
JRST .-1
|
||
];nodpy
|
||
|
||
IN2: CAIE T,175
|
||
CAIN T,176
|
||
MOVEI T,33
|
||
SKIPE OUTSW(I)
|
||
JRST @OUTSW(I)
|
||
CAIL T,^I
|
||
CAILE T,^M
|
||
JRST IN3
|
||
SKIPE TTYFLG
|
||
POPJ P,
|
||
PUSH P,T
|
||
MOVEI T,15
|
||
PUSHJ P,TYO2
|
||
MOVEI T,12
|
||
PUSHJ P,TYO2
|
||
POPTJ: POP P,T
|
||
POPJ P,
|
||
|
||
IN3: PUSHJ P,TYO2
|
||
|
||
LPTR: SKIPN LPTFLG
|
||
POPJ P,
|
||
IFN LPTP,[
|
||
CAIE T,15
|
||
JRST .+3
|
||
CONO LPT,10
|
||
POPJ P,
|
||
PUSH P,T
|
||
CAIN T,12
|
||
MOVEI T,440
|
||
CAIN T,14
|
||
MOVEI T,441
|
||
CAIN T,33
|
||
MOVEI T,"$
|
||
SUBI T,40
|
||
dpy340,[
|
||
CONSZ LPT,10
|
||
PUSHJ P,DISCFT
|
||
];dpy340
|
||
nodpy,[
|
||
CONSZ LPT,10
|
||
JRST .-1
|
||
];nodpy
|
||
DATAO LPT,T
|
||
POP P,T
|
||
]
|
||
POPJ P,
|
||
|
||
TOUT:
|
||
dpy340,[
|
||
SKIPE DISON ;IF DISPLAY ON,
|
||
PUSHJ P,CHECK
|
||
];dpy340
|
||
TOUT2: SKIPE OUTSW(I)
|
||
JRST @OUTSW(I)
|
||
PUSHJ P,LPTR
|
||
TYO: SKIPN TTYFLG
|
||
POPJ P,
|
||
TYO2: CAIL T," ;SPACE
|
||
JRST TYO3
|
||
CAIN T,177
|
||
POPJ P,
|
||
CAIL T,^I
|
||
CAILE T,^M
|
||
CAIN T,^G
|
||
JRST TYO3
|
||
PUSH P,T
|
||
CAIE T,33
|
||
MOVEI T,"^
|
||
CAIN T,33
|
||
MOVEI T,"$
|
||
PUSHJ P,TYO3
|
||
POP P,T
|
||
CAIN T,33
|
||
POPJ P,
|
||
TRO T,100
|
||
PUSHJ P,TYO3
|
||
TRZ T,100
|
||
POPJ P,
|
||
|
||
TYO3:
|
||
TS, .IOT CHTTYO,T
|
||
ka,[
|
||
CONSZ TTY,20
|
||
dpy340, PUSHJ P,DISCFT
|
||
nodpy, JRST .-1
|
||
DATAO TTY,T
|
||
];ka
|
||
kl,[
|
||
PUSH P,T
|
||
ANDI T,177
|
||
PUSHJ P,XDTCM
|
||
POP P,T
|
||
];kl
|
||
KS,[ PUSH P,T
|
||
ANDI T,177
|
||
TRO T,400 ;Set CTY-char-pending
|
||
MOVEM T,8CTYOT ;Store in comm area
|
||
CONI T ;Read 8080
|
||
TRO T,80INT ;Hey you! Get this!
|
||
CONO (T) ;Interrupt 8080
|
||
SKIPE 8CTYOT ;Wait for completion
|
||
JRST .-1
|
||
POP P,T
|
||
];KS
|
||
POPJ P,
|
||
|
||
|
||
TYI:
|
||
TS, .IOT CHTTYI,T
|
||
ka,[
|
||
CONSO TTY,40
|
||
POPJ P,
|
||
DATAI TTY,T
|
||
];ka
|
||
kl,[
|
||
MOVEI T,3400 ;DDT MODE INPUT REQ
|
||
PUSHJ P,XDTCM
|
||
JUMPE T,CPOPJ ;NOTHING AVAILABLE
|
||
];kl
|
||
KS,[ SKIPN T,8CTYIN ;Chars stored here by 8080.
|
||
POPJ P,
|
||
SETZM 8CTYIN ;Remember to clear it.
|
||
];KS
|
||
ANDI T,177
|
||
CAIGE T,175
|
||
CAIG T,137
|
||
SKIPA
|
||
SUBI T,40 ;UPPERCASIFY
|
||
CAIE T,^B
|
||
JRST LPTON1
|
||
SETOM LPTFLG
|
||
IFN LPTP, CONO LPT,10
|
||
LPTON1: CAIN T,^E
|
||
SETZM LPTFLG
|
||
CAIN T,^V
|
||
SETOM TTYFLG
|
||
CAIN T,^W
|
||
SETZM TTYFLG
|
||
JRST CPOPJ1
|
||
|
||
|
||
kl,[
|
||
XDTCM: SETZM DTEFLG ;SEND ARG IN T TO 11, GET RESPONSE IN T
|
||
MOVEM T,DTECMD
|
||
CONO DTE,%DBL11
|
||
SKIPN DTEFLG
|
||
JRST .-1
|
||
MOVE T,DTEF11
|
||
SETZM DTEFLG
|
||
POPJ P,
|
||
];kl
|
||
|
||
|
||
RESTORE:SETOM TEM3
|
||
RESTR1: HRRM T,SAVE
|
||
CLEARM SARS
|
||
MOVE T,SAVPI
|
||
HLLM T,SAVE
|
||
ANDI T,177 ;CHANNELS THAT WERE ON
|
||
IORI T,2000 ;TURN ON CHANNELS
|
||
MOVEM T,SAVPI
|
||
RES1: HRLZI 17,AC0
|
||
BLT 17,17
|
||
SKIPL TEM3
|
||
CPUSHP: PUSH BCOM
|
||
NTS, CONO PRS,@SAVPI
|
||
JRST 2,@SAVE
|
||
|
||
CRF: JSR 15,TYOI
|
||
LF: MOVEI T,12 ;LINE FEED
|
||
JRST TOUT
|
||
|
||
;FLOATING POINT OUTPUT
|
||
|
||
TFLOT: MOVE A,T
|
||
JUMPG A,TFL1
|
||
JUMPE A,FP1A
|
||
MOVNS A
|
||
XCT "-,CRF
|
||
TLZE A,400000
|
||
JRST FP1A
|
||
|
||
TFL1: TLNN A,400
|
||
XCT "#,CRF ;NOT NORMALIZED
|
||
|
||
FP1: MOVEI B,0
|
||
CAMGE A,FT01
|
||
JRST,FP4
|
||
CAML A,FT8
|
||
AOJA B,FP4
|
||
FP1A: MOVEI C,0
|
||
|
||
FP3: MULI A,400
|
||
ASHC B,-243(A)
|
||
MOVE A,B
|
||
CLEARM,TEM1(I)
|
||
PUSHJ P,FP7
|
||
XCT ".,CRF
|
||
MOVNI A,10
|
||
ADD A,TEM1(I)
|
||
MOVE W1,C
|
||
FP3A: MOVE T,W1
|
||
MULI T,12
|
||
PUSHJ P,FP7B
|
||
SKIPE,W1
|
||
AOJL A,FP3A
|
||
POPJ P,
|
||
|
||
FP4: MOVNI C,6
|
||
MOVEI W2,0
|
||
FP4A: ADDI W2,1(W2)
|
||
XCT,FCP(B)
|
||
SOSA W2
|
||
FMPR A,@FCP+1(B)
|
||
FP4B: AOJN C,FP4A
|
||
MOVNI B,-2(B)
|
||
PUSH P,B
|
||
PUSHJ P,FP3
|
||
MOVEI T,105
|
||
PUSHJ P,TOUT
|
||
POP P,T
|
||
DPB T,[300200,,.+1]
|
||
XCT "+,CRF
|
||
MOVE A,W2
|
||
|
||
FP7: JUMPE A,FP7A1
|
||
IDIVI A,12
|
||
AOS,TEM1(I)
|
||
FP7A: HRLM B,(P)
|
||
JUMPE A,FP7A1
|
||
PUSHJ P,FP7
|
||
|
||
FP7A1: HLRZ T,(P)
|
||
FP7B: ADDI T,260
|
||
JRST,TOUT
|
||
|
||
1.0^32.
|
||
1.0^16.
|
||
FT8: 1.0^8
|
||
1.0^4
|
||
1.0^2
|
||
1.0^1
|
||
FT: 1.0^0
|
||
1.0^-32.
|
||
1.0^-16.
|
||
1.0^-8
|
||
1.0^-4
|
||
1.0^-2
|
||
FT01: 1.0^-1
|
||
FT0=FT01+1
|
||
|
||
FCP: CAMLE A, FT0(C)
|
||
CAMGE A, FT(C)
|
||
0, FT0(C)
|
||
|
||
PS: BLOCK LPDL
|
||
|
||
dpy340,DISPDL: BLOCK LPDL
|
||
|
||
INFORM [END OF LOWCODE]\.-1
|
||
|
||
subttl communication with DSKDMP and ITS
|
||
|
||
IF1, IFG .-LOWCOD+6-LOWLEN,.ERR LOW CODE DOESN'T FIT, MAKE LOWLEN BIGGER
|
||
|
||
LOC DDT-6
|
||
ALTPC ;-6 PLACE WHERE PC TO PROCEED THROUGH IS STORED
|
||
-20,,AC0 ;-5 PNTR TO SAVED LOW CORE (ESPECIALLY ACS)
|
||
STARTA: 0 ;-4 START ADDRESS
|
||
KILC: -NSYMS,,LOW ;-3 INITIAL SYMBOLS PNTR
|
||
-NSYMS,,LOW ;-2 ALL SYMBOLS PNTR
|
||
JOBSYM: .-1 ;-1 BIT 4.9=1 => SYMBOL TABLE CLOBBERED
|
||
;+0 DDT STARTS HERE
|
||
|
||
NSYMS==NUMSYM*2
|
||
LOW=LOWCOD-NSYMS-2
|
||
|
||
IFN MCDMPF, MACDMP=37400+MOBY
|
||
.ELSE [
|
||
noswap, MACDMP=37700+MOBY ;FOR DSKDMP
|
||
swap, IF2 MACDMP==ERR ;if neither dskdmp nor magdmp
|
||
]
|
||
|
||
MACCR=37777+MOBY
|
||
|
||
subttl flag register assignments
|
||
|
||
;LEFT HALF FLAGS
|
||
TIF==100000 ;TRUNCATE TO 18 BITS - SET BY SPACE OR COMMA
|
||
PTF==100 ; +, -, OR * HAS BEEN TYPED
|
||
COMF==200000 ;COMMA FLAG
|
||
CTF==400
|
||
SF==4 ;SYLLABLE FLAG
|
||
QF==1 ;QUANTITY TYPED IN TO WORD ASSEMBLER
|
||
|
||
CF==40 ;ALTMODE TYPED
|
||
CCF==400000 ;2 ALTMODES TYPED
|
||
MF==2 ;MINUS SIGN TYPED IN
|
||
LTF==20 ;LETTER TYPED IN TO CURRENT SYLLABLE
|
||
ROF==10 ;REGISTER OPEN FLAG
|
||
STF==4000 ;! MODE
|
||
FAF==1000 ; < TYPED
|
||
SAF==2000 ; > TYPED
|
||
|
||
FPF==20000 ; . TYPED IN
|
||
FEF==10000 ; E FLAG
|
||
|
||
MLF==200 ;*FLAG
|
||
DVF==40000 ;DIVIDE FLAG
|
||
|
||
;RIGHT HALF FLAGS
|
||
1RF==10
|
||
OUTPUT==4 ;OPDECODER FLAGS
|
||
|
||
CF1==400 ;OUTPUT 1 REGISTER AS CONSTANT
|
||
LF1==2000 ;OUTPUT 1 REGISTER AS FORCED SYMBOLIC OR CONSTANT
|
||
Q2F==1 ;NUMBER TYPED AFTER
|
||
SBF==20
|
||
NAF==200 ;NEGATIVE ADDRESSES PERMISSABLE
|
||
POWF==4000 ;ARGUMENT FOR EXPONENT COMING
|
||
SLL==10000 ;STOP LOOKING FOR LOCALS
|
||
|
||
GLOBAL==040000 ;GLOBAL SYMBOL
|
||
LOCAL==100000
|
||
PNAME==740000 ;PROGRAM NAME
|
||
DELI==200000 ;DELETE INPUT
|
||
DELO==400000 ;DELETE OUTPUT
|
||
|
||
subttl ddt starts here
|
||
|
||
INFORM DDT,\.
|
||
|
||
|
||
DDT: CLEARM INSW ;IF C(INSW) .NE. 0 THEN INPUT ROUTINE JRST'S @INSW
|
||
CLEARM OUTSW
|
||
TS,[
|
||
.OPEN CHTTYO,[.UAO,,'TTY ? SETZ ? SETZ]
|
||
.LOSE
|
||
.OPEN CHTTYI,[.UII,,'TTY ? SETZ ? SETZ]
|
||
.LOSE
|
||
];TS
|
||
JSR SAVE ;SAVE PROCESSOR CONDITION
|
||
PUSHJ P,BRKRET ;DIDN'T SKIP, PI STATUS AND AC'S WERE SAVED
|
||
SKIPGE JOBSYM ;IF SYMTAB MUNGED,
|
||
JRST IFIX ;THEN GO FIX IT
|
||
DD1A:
|
||
dpy340,[
|
||
PUSHJ P,DISINI ;INITIALIZE DISPLAY
|
||
]
|
||
DD1: TLZ F,ROF ;INDICATE NO REGISTER OPEN
|
||
PUSHJ P,CRF ;TYPE CRLF (AND RUN SCOPE IF ON)
|
||
MOVE T,[SCHM,,SCH]
|
||
BLT T,ODF
|
||
DD2: MOVEI P,PS
|
||
CLEARM PRNC ;PARENTHESES COUNT
|
||
LIS: MOVE T,ESTU
|
||
MOVEM T,ESTUT
|
||
LISA: TDZ F,[(,-1-ROF-STF)LF1+CF1+SBF+2] ;LEAVE REGISTER OPENED,TYPEOUT SUPPRESSED
|
||
LISB: TDZ F,[(,-1-ROF-STF-FAF-SAF)NAF]
|
||
CLEARM,WRD
|
||
LIS1: CLEARM,FRASE
|
||
LIS2: MOVEI T,1
|
||
MOVEM T,FRASE1
|
||
TLZ F,MLF+DVF
|
||
L1: TLZ F,CF+CCF+SF+FPF ;TURN OFF CONTROL, SYL, PERIOD FLAG
|
||
CLEARM,SYL
|
||
L1RPR: CLEARM,SYM
|
||
MOVSI T,(50*50*50*50*50*50)
|
||
MOVEM T,TEM(I) ;INIT SYMBOL COUNTER
|
||
CLEARM,DEN
|
||
CLEARM,WRD2
|
||
|
||
L2: PUSHJ P,IN ;PICK UP CHARACTER
|
||
TLNE F,CF ;CONTROL FLAG
|
||
JRST,L21
|
||
CAIG T,"Z ;Z
|
||
CAIGE T,"A ;A
|
||
JRST,.+2
|
||
JRST,LET
|
||
L21: MOVE R,T
|
||
CAIN T,177
|
||
JRST WRONG
|
||
CAILE T,"_
|
||
JRST ERR
|
||
IDIVI R,3
|
||
LDB W,BDISP(R+1)
|
||
CAIGE W,MULT-DDT ;LOCATIONS BEFORE MULT DON'T HAVE ARG EVALUATED
|
||
JRST DDT(W)
|
||
|
||
L211: MOVE T,SYL
|
||
TLZN F,LTF
|
||
JRST POWER
|
||
L4A: PUSHJ P,EVAL
|
||
JRST,UND1
|
||
L4: TLZE F,MF
|
||
MOVN T,T
|
||
TLNN F,SF
|
||
CAIE W,LPRN-DDT
|
||
JRST,.+2
|
||
JRST,LPRN
|
||
|
||
EXCH T,FRASE1
|
||
TLNN F,DVF
|
||
IMULB T,FRASE1
|
||
TLZE F,DVF
|
||
IDIVB T,FRASE1
|
||
CAIGE W,ASSEM-DDT
|
||
JRST DDT(W) ;MULTIPLY OR DIVIDE
|
||
ADDB T,FRASE
|
||
CAIGE W,SPACE-DDT
|
||
JRST DDT(W) ; + - @ ,
|
||
|
||
ADD T,WRD
|
||
TLNE F,TIF ;TRUNCATE INDICATOR FLAG
|
||
HLL T,WRD ;TRUNCATE
|
||
MOVEM T,WRD
|
||
TLNN F,QF
|
||
MOVE T,LWT(I)
|
||
CLEARM,R
|
||
MOVE W1,ESTUT
|
||
CAMN W1,ESTU
|
||
JRST L5
|
||
CAILE W,CARR-DDT
|
||
JRST ERR
|
||
L5: CAIG W,RPRN-DDT
|
||
JRST DDT(W)
|
||
PUSH P,KILRET
|
||
SKIPN PRNC
|
||
JRST DDT(W)
|
||
|
||
UNDEF: MOVEI T,"U ;U
|
||
JRST WRONG1
|
||
ERR:
|
||
WRONG: MOVEI T,"?
|
||
WRONG1: MOVEI P,PS
|
||
PUSHJ P,TOUT
|
||
RET: MOVEI P,PS
|
||
PUSHJ P,LCT ;COMMON RETURN FOR TAB;,JRST,LIS
|
||
JRST DD2
|
||
|
||
UND1: MOVE R,ESTUT ;UNDEFINED SYM ASSEMBLER
|
||
PUSHJ P,EVAL2
|
||
CAIN W,ASSEM-DDT
|
||
TLNN F,ROF
|
||
JRST OPLOOK
|
||
LDB T,[(100)PRNC]
|
||
JUMPN T,UNDEF
|
||
CAIE W,ASSEM-DDT
|
||
XCT "#,CRF
|
||
MOVN R,[(2)2]
|
||
ADDB R,ESTUT
|
||
dpy340, PUSHJ P,DISINI
|
||
MOVE T,SYM
|
||
TLO T,GLOBAL
|
||
MOVEM T,(R)
|
||
HRRZ T,LLOCO
|
||
TLNE F,MF
|
||
TLO T,400000
|
||
MOVEM T,1(R)
|
||
SETZI T,
|
||
JRST L4
|
||
|
||
QUESTN: PUSHJ P,CRF ;LIST UNDEFINED SYMBOLS
|
||
MOVE R,ESTU
|
||
QUEST1: JUMPGE R,DD1
|
||
MOVE T, (R)
|
||
SKIPA W1,ESTU
|
||
|
||
QUEST2: ADD W1,[(2)2]
|
||
CAME T,(W1)
|
||
JRST QUEST2
|
||
|
||
QUEST3: CAME R,W1
|
||
JRST QUEST4
|
||
PUSHJ P,SPT
|
||
PUSHJ P,CRF
|
||
QUEST4: ADD R,[(2)2]
|
||
JRST QUEST1
|
||
|
||
OPLOOK: MOVE T,OPLK1
|
||
MOVEI W1,SYM
|
||
MOVE R,[(440700)TXT]
|
||
PUSHJ P,SPT+1
|
||
OPLK1: IDPB T,R
|
||
|
||
;OPDECODER
|
||
|
||
OPEVAL: MOVEM P,SAVPDL
|
||
TRZA F,OUTPUT
|
||
OPTYPE: TRO F,OUTPUT
|
||
LSH T,-27.
|
||
MOVEM T,INST(I)
|
||
MOVE T,[(440700)TXT]
|
||
MOVEM T,CHP
|
||
DEC: TRZ F,1RF
|
||
CLEARB R,W1
|
||
MOVE W2,BTAB
|
||
OPDC1: ILDB T,W2
|
||
CAILE T,40
|
||
CAIL T,73
|
||
SOJGE R,OPDC1
|
||
JUMPG R,OPDC1
|
||
SUBI T,40
|
||
JUMPE T,DECX
|
||
JUMPG T,DC2
|
||
DPB T,[(340500)PNTR]
|
||
TRZ T,-4
|
||
AOS T
|
||
DPB T,[(300600)PNTR]
|
||
TRNN F,OUTPUT
|
||
JRST DC6
|
||
LDB R,PNTR
|
||
JRST OPDC1
|
||
|
||
DC2: HRREI T,-33(T)
|
||
JUMPL T,DECT
|
||
MOVE W1,T
|
||
IDIVI W1,3
|
||
MOVE W2,BTAB(W2)
|
||
ADDI W2,(W1)
|
||
JRST OPDC1
|
||
|
||
DECT: TRNE F,OUTPUT
|
||
JRST O1CZ
|
||
ILDB W1,CHP
|
||
CAIE W1,133(T)
|
||
JRST LOSE
|
||
JRST OPDC1
|
||
|
||
DECX: TRNE F,OUTPUT
|
||
POPJ P,
|
||
ILDB W1,CHP
|
||
JUMPE W1,DC7
|
||
LOSE: POP P,R
|
||
POP P,W2
|
||
POP P,PNTR
|
||
POP P,CHP
|
||
LOSE1: AOS R
|
||
DPB R,PNTR
|
||
LDB R,PNTR
|
||
JUMPN R,DC6AA
|
||
CAME P,SAVPDL
|
||
JRST LOSE
|
||
MOVSI T,DELO ;LOOK FOR HALF-KILLED AND DIFFERENT PROGRAMS' LOCALS
|
||
IORM T,SYM ;NOTE SETTING DELO HACKS EVAL3+2 TO IGNORE PROGRAM NAMES
|
||
PUSHJ P,EVAL
|
||
JRST UNDEF ;NOT DEFINED AT ALL
|
||
PUSH P,R
|
||
PUSHJ P,EVAL1 ;LOOK FOR DUPLICATE INSTANCES
|
||
XCT "',CRF ;DIFFERENT PROGRAM SELECTED
|
||
CAME R,PRGM
|
||
XCT "",CRF ;MULTIPLY DEFINED
|
||
POP P,R
|
||
LOSE2: MOVEM R,PRGM ;BACK UP TO PRECEDING PROGRAM NAME+2
|
||
SUB R,[2,,2]
|
||
MOVE W1,(R)
|
||
TLNE W1,PNAME
|
||
JRST LOSE2
|
||
JRST L4A ;SELECT APPROPRIATE PROGRAM
|
||
|
||
DC6: MOVEI R,0
|
||
DPB R,PNTR
|
||
DC6AA: CAMN P,SAVPDL
|
||
JRST DC6BB
|
||
LDB T,-2(P)
|
||
CAME T,(P)
|
||
JRST LOSE1
|
||
DC6BB: PUSH P,CHP
|
||
PUSH P,PNTR
|
||
PUSH P,W2
|
||
PUSH P,R
|
||
JRST OPDC1
|
||
|
||
DC7: MOVE P,SAVPDL
|
||
MOVE T,INST(I)
|
||
LSH T,27.
|
||
JRST L4
|
||
|
||
O1CZ: TRO F,1RF
|
||
MOVEI T,133(T)
|
||
PUSHJ P,TOUT
|
||
JRST OPDC1
|
||
|
||
PNTR: INST(I)
|
||
CHP: 0
|
||
TXT: BLOCK 2
|
||
|
||
SAVPDL: 0
|
||
BTAB: FOO=44
|
||
REPEAT 3,[(FOO_12.+1400)TBL
|
||
FOO=FOO-14
|
||
]
|
||
|
||
DEFINE BARF A
|
||
AWRD=AWRD+<A>_CC
|
||
CC=CC-12.
|
||
IFL CC,[AWRD
|
||
AWRD=0
|
||
CC=24.
|
||
]
|
||
CLOC=CLOC+1
|
||
TERMIN
|
||
|
||
DEFINE HACK A
|
||
IRPS B,D,[A]
|
||
Z="D
|
||
IFE Z-">,Y!B==CLOC
|
||
IF1 IFE Z-"/, BARF 1
|
||
IF2 IFE Z-"/, BARF Y!B+73
|
||
IFE Z-"^,BARF <B&70>_-1+B&7-1
|
||
IFE <Z-40>*<Z-15>,[
|
||
IRPC Q,,B
|
||
Z="Q
|
||
IFE Z-".,Z=100
|
||
BARF Z-40
|
||
TERMIN
|
||
]
|
||
TERMIN
|
||
TERMIN
|
||
|
||
subttl opcode dispatch table
|
||
|
||
TBL: AWRD=0
|
||
CLOC=0
|
||
CC=24.
|
||
|
||
KA,[
|
||
;INITIAL DISPATCH
|
||
HACK [63^. FLO/ HAK/ ACCP/ BOOLE/ H HWT/ T ACBM/ . ]
|
||
|
||
;BYTE AND FLOATING INST
|
||
HACK [FLO> 33^ ... BYTE/ FAD A/ FSB A/ FMP A/ FDV A>
|
||
21^ LMB/ R IMB/ LMB> 02^ . L>L. M>M. B>B. BYTE> 03^ ..
|
||
FS C/ IB P> P. I LD/ LD> LD B/ I DP/ DP> DP B/]
|
||
];KA
|
||
|
||
KL,[
|
||
;INITIAL DISPATCH
|
||
HACK [63^. FLO/ HAK/ ACCP/ BOOLE/ H HWT/ T ACBM/ . ]
|
||
|
||
;BYTE AND FLOATING INST
|
||
HACK [FLO> 33^ ADJ/ D DBL/ KI/ BYTE/ FAD A/ FSB A/ FMP A/ FDV A>
|
||
21^ LMB/ R IMB/ LMB> 02^ . L>L. M>M. B>B. BYTE> 03^ UFA. DFN.
|
||
FS C/ IB P> P. I LD/ LD> LD B/ I DP/ DP> DP B/
|
||
ADJ> 03^ . . . . . ADJSP. . .]
|
||
|
||
;DOUBLE PRECISION
|
||
HACK [DBL> 03^ FAD . FSB . FMP . FDV . ADD . SUB . MUL . DIV .]
|
||
|
||
;MISC KI/KL INSTRS
|
||
HACK [KI> 12^ DMV/ FIXEX/ DMV/ F 01^ IX R/ LT R> R .
|
||
DMV> DMOV 01^ E DMV2/ N DMV2> 21^ . M/
|
||
FIXEX> 01^ FIX . EXTEND .]
|
||
];KL
|
||
|
||
TKS,[
|
||
;INITIAL DISPATCH
|
||
HACK [63^ . FLO/ HAK/ ACCP/ BOOLE/ H HWT/ T ACBM/ IO/ ]
|
||
|
||
;BYTE AND FLOATING INST
|
||
HACK [FLO> 33^ XCAD/ D DBL/ KI/ BYTE/ FAD A/ FSB A/ FMP A/ FDV A>
|
||
21^ LMB/ R IMB/ LMB> 02^ . L>L. M>M. B>B. BYTE> 03^ UFA. DFN.
|
||
FS C/ IB P> P. I LD/ LD> LD B/ I DP/ DP> DP B/
|
||
XCAD> 03^ . . XCTR/ XCTR/ . ADJSP. . .
|
||
XCTR> XCTR 01^ I. .]
|
||
|
||
;DOUBLE PRECISION
|
||
HACK [DBL> 03^ FAD . FSB . FMP . FDV . ADD . SUB . MUL . DIV .]
|
||
|
||
;MISC KI/KL INSTRS
|
||
HACK [KI> 12^ DMV/ FIXEX/ DMV/ F 01^ IX R/ LT R> R .
|
||
DMV> DMOV 01^ E DMV2/ N DMV2> 21^ . M/
|
||
FIXEX> 01^ FIX . EXTEND .]
|
||
|
||
;ITS KS IO INSTRUCTIONS
|
||
HACK [IO> 33^ IO0/ IO1/ IO2/ . . . . .
|
||
IO0> 12^ . . UMV/ .
|
||
UMV> UMOVE 01^ . M/
|
||
IO1> IO2> 12^ IORD/ IOXX/ IOWR/ BLTX/
|
||
IOXX> 01^ IORD/ IOWR> IOWR IOBY/
|
||
IORD> IORD IOBY> 41^ IOIQ/ B IOIQ> 02^ I/ Q. . .
|
||
BLTX> 41^ BLTXX/ . BLTXX> BLT 01^ BU. UB.]
|
||
|
||
;DEC KS IO INSTRUCTIONS
|
||
; HACK [IO> 33^ IO0/ IO1/ IO2/ . . . . .
|
||
; IO0> 12^ . . UMV/ .
|
||
; UMV> UMOVE 01^ . M/
|
||
; IO1> IO2> 03^ TIO/ TIO/ RD IOB/ WR IOB/ BS IOB/ BC IOB/ . .
|
||
; TIO> TIO 01^ E IOBP/ N IOBP/
|
||
; IOB> IO IOBP> 41^ . B/ ]
|
||
|
||
];TKS
|
||
|
||
;FWT, FIXED POINT ARITH, MISC.
|
||
HACK [HAK> 33^ MV/ MV> MOV MO/ ML/ DV/ SH/ H1/ JP/
|
||
21^ ADD IMB/ SU BIMB> B IMB> 02^ . I>I. M/ B/ MO> 22^
|
||
EIMS> E IMS/ S IMS/ N IMS/ M IMS> 02^ . I/ M/ S> S.
|
||
ML> 21^ I ML1/ ML1> MUL IMB/ DV> 21^ I DV1/ DV1>
|
||
DI DV2> V IMB/ H1> 03^ EXC S3/ BL T> T. AO/ AO> AOBJ
|
||
AOB/ JRS T/ JFC L/ XC T/ . AOB> 01^ P/ N/
|
||
JP> 03^ PU/ PU> PUSH PUS/ PO/ PO> POP POP/ JSR.
|
||
JS P/ JS PA> A. JR PA/ PUS> 01^ J> J.. POP>
|
||
01^ . J/ SH> 02^ A S2/ ROT S1/ L S2> S S3> H S1/ 21^ JFFO. CIR C/
|
||
S1> 21^ . C> C. ]
|
||
|
||
;ARITH COMP, SKIP, JUMP
|
||
HACK [ACCP> 42^ CA CA1/ SJ/ A JS/ S JS> O 31^
|
||
J COMP/ S COMP/ CA1> 31^ I COMP/ M COMP/
|
||
SJ> 31^ JUM PSJ/ SKI PSJ> P COMP>
|
||
03^ . L/ E> E. L E/ PA/ G E/ N> N. G. ]
|
||
|
||
;BOOLEAN
|
||
HACK [BOOLE> 24^ ST/ AN> AND B2/ AN/ ST/ AN/ ST/
|
||
X OR> OR B2/ I OR/ AN/ EQ DV2/ ST/ OR/ ST/ OR/ OR/
|
||
ST> SET B2> 24^ Z IMB/ IMB/ CA> C TA/ TM> M IMB/
|
||
CM> C TM/ TA> A IMB/ IMB/ IMB/ CB> C BIMB/ IMB/ CA/
|
||
CA/ CM/ CM/ CB/ O IMB/ ]
|
||
|
||
;HALF WORDS
|
||
HACK [HWT> 51^ HW1/ 21^ R HW2/ L HW2> R HW3/ HW1>
|
||
21^ L HW4/ R HW4> L HW3> 32^ IMS/ Z IMS/ O IMS/
|
||
EIMS/ ]
|
||
|
||
;TEST INST
|
||
HACK [ACBM> 31^ AC1/ 01^ D AC2/ S AC2/ AC1> 01^ R AC2/ L
|
||
AC2> 42^ N EAN/ Z EAN/ C EAN/ O EAN> 12^ . E/ PA/ N/ ]
|
||
|
||
IFN AWRD,AWRD
|
||
|
||
subttl command action routines
|
||
|
||
NUM: ANDI T,17 ;T HOLDS CHARACTER
|
||
TLNE F,CF+FPF
|
||
JRST NM1
|
||
MOVEI W,10
|
||
IMULM W,SYL
|
||
ADDM T,SYL
|
||
MOVEI W,10. ;ALSO MAINTAIN DECIMAL WORD
|
||
IMULM W,DEN
|
||
ADDM T,DEN
|
||
LE1: AOJA T,LE1A ;FOR SQUOZE SYM
|
||
|
||
DOLLAR:
|
||
PERC: MOVEI T,47+101-13-45(T) ;PERCENT SIGN
|
||
LET: TLC F,SF+FPF ;EXPONENT IFF LTF'*FEF'*(T=105)*SF*FPF=1
|
||
TLZN F,LTF+FEF+SF+FPF
|
||
CAIE T,"E
|
||
TLOA F,LTF
|
||
TLOA F,FEF
|
||
JRST LET1
|
||
TLZN F,MF
|
||
SKIPA W1,SYL
|
||
MOVN W1,SYL
|
||
MOVEM W1,FSV
|
||
CLEARM DEN
|
||
LET1: SUBI T,101-13 ;FORM RADIX 50 SYMBOL
|
||
LE1A: TLO F,SF+QF
|
||
LE2: MOVEI W,50
|
||
EXCH W,TEM(I)
|
||
IDIVM W,TEM(I)
|
||
IMUL T,TEM(I)
|
||
ADDM T,SYM
|
||
JRST L2
|
||
|
||
NUM1: EXCH T,WRD2 ;FORM NUMBER AFTER DOLLAR SIGN
|
||
IMULI T,10.
|
||
ADDM T,WRD2
|
||
TRO F,Q2F
|
||
JRST,L2
|
||
|
||
NM1: TLNE F,CF
|
||
JRST NUM1
|
||
MOVEI W1,6 ;FORM FLOATING POINT NUMBER
|
||
AOS NM1A
|
||
NM1A: MOVEI W2,0
|
||
MOVSI R,201400
|
||
NM1A1: TRZE W2,1
|
||
FMPR R,FT(W1)
|
||
JUMPE W2,NM1B
|
||
LSH W2,-1
|
||
SOJG W1,NM1A1
|
||
NM1B: MOVSI W1,211000(T)
|
||
FMPR R,W1 ;COMPUTE VALUE OF NEW DIGIT
|
||
FADRB R,FH ;ADD VALUE INTO FLOATING NO.
|
||
REPEAT 0,[ ;I THINK THIS HAIRY ROUNDING IS UNNEC. ALSO KL HAS NO "FMPL".
|
||
FMPL R,W1
|
||
SKIPN FH
|
||
JRST NM1C
|
||
LDB W2,[(331000)R]
|
||
LDB W1,[(331000)FH]
|
||
TLZ R,377000
|
||
SUB W2,W1
|
||
ASHC R,(W2)
|
||
ADD S,FL
|
||
TLZE S,400000
|
||
AOS R
|
||
MOVE W2,FH
|
||
TLZ W2,377000
|
||
ADD R,W2
|
||
TLNN R,1000
|
||
SOSA W1
|
||
ASHC R,-1
|
||
FSC R,1(W1)
|
||
NM1C: MOVEM R,FH
|
||
MOVEM S,FL
|
||
JUMPE R,NM1D
|
||
TLNE S,200000
|
||
AOS R ; ROUND
|
||
TLO R,400 ; NORMALIZE
|
||
NM1D:
|
||
] ;END REPEAT 0
|
||
MOVEM R,SYL
|
||
AOJA T,LE1A
|
||
|
||
POWER: TLNN F,FEF
|
||
JRST L4 ;NO EXPONENT
|
||
CAIE W,PLUS-DDT
|
||
CAIN W,MINUS-DDT
|
||
TROE F,POWF
|
||
TRZA F,POWF
|
||
JRST DDT(W) ; E+-
|
||
|
||
MOVE W2,DEN
|
||
MOVEI W1,FT-1
|
||
TLZE F,MF
|
||
MOVEI W1,FT01
|
||
SKIPA T,FSV
|
||
POW2: LSH W2,-1
|
||
TRZE W2,1
|
||
FMPR T,(W1)
|
||
JUMPE W2,L4
|
||
SOJA W1,POW2
|
||
|
||
GETPC: SKIPN T,ALTPC
|
||
JRST [HRRZ T,BCOM ? SOS T ? JRST .+1]
|
||
AOS (P)
|
||
POPJ P,
|
||
|
||
PERIOD: TLNE F,CF
|
||
PUSHJ P,GETPC
|
||
MOVE T,LLOC
|
||
TLNE F,SF ;SYLLABLE STARTED
|
||
MOVE T,DEN
|
||
MOVEM T,SYL
|
||
TLON F,FPF+SF+QF
|
||
MOVEI T,0
|
||
IDIVI T,400
|
||
SKIPE T
|
||
TLC T,243000
|
||
TLC W1,233000
|
||
FSC T,0 ;NORMALIZE
|
||
FSC W1,0
|
||
FADR T,W1
|
||
REPEAT 0,[ ;I THINK THIS DOUBLE PRECISION IS UNNEC. ALSO KL HAS NO "FADL"
|
||
FADL T,W1
|
||
MOVEM W1,FL
|
||
] ;END REPEAT 0
|
||
MOVEM T,FH
|
||
HLLZS NM1A
|
||
MOVEI T,45 ;RADIX 50 PERIOD
|
||
JRST LE2
|
||
|
||
QUAN: SKIPA T,LWT(I) ;LAST QUANTITY TYPED
|
||
PILOC: MOVEI T, SAVPI
|
||
QUAN1: MOVEM T,SYL
|
||
QUAN2: TLO F,SF+QF ;WRD,SYL STARTED
|
||
TLZ F,CF+CCF
|
||
JRST,L2
|
||
|
||
CONTROL: TLOE F,CF
|
||
TLO F,CCF
|
||
JRST,L2
|
||
|
||
EVAL: MOVE R,PRGM ;LOOK UP SYMBOL
|
||
EVAL0: HRLOI W1,37777+DELI ;W1 BITS MUST BE OFF
|
||
JRST EVAL3
|
||
|
||
EVAL1: ADD R,[(2)2] ;NEXT SYMBOL
|
||
EVAL2: SKIPL R
|
||
MOVE R,@JOBSYM ;WRAP AROUND
|
||
CAMN R,PRGM ;SKIP UNLESS SCANNED ENTIRE SYMBOL TABLE
|
||
POPJ P, ;NO SYMBOL FOUND
|
||
EVAL3: MOVE T,(R)
|
||
XOR T,SYM
|
||
TLNN T,PNAME ;SKIP UNLESS SYMBOL IS PROGRAM NAME
|
||
TLOA W1,LOCAL ;PROGRAM NAME, FROM NOW ON IGNORE LOCALS
|
||
TDNE T,W1
|
||
JRST EVAL1 ;PROGRAM NAME OR NO MATCH, TRY NEXT
|
||
TLNN T,340000
|
||
JRST EVAL1 ;PROGRAM NAME, SKIP IT (CAN HAPPEN IF GOT HERE FROM LOSE1)
|
||
MOVE T,1(R) ;GOT IT, RETURN VALUE IN T, SYMBOL TABLE PNTR IN R.
|
||
|
||
CPOPJ1: AOS (P) ;FOUND SYMBOL, SKIP
|
||
CPOPJ: POPJ P,
|
||
|
||
|
||
;BIT 40 - DELETE OUTPUT
|
||
; 20 - DELETE INPUT
|
||
; 10 - LOCAL
|
||
; 04 -GLOBAL
|
||
; NO BITS - PROGRAM NAME
|
||
|
||
KILL: TLNN F,LTF ;DELETE SYMBOLS
|
||
JRST,KILLA
|
||
PUSHJ P,EVAL
|
||
JRST KILL1
|
||
MOVEI T,DELO_-16. ;DELETE OUTPUT
|
||
TLNE F,CCF
|
||
MOVEI T,DELI_-16. ;NO INPUT OR OUTPUT
|
||
DPB T,[(420200+R)]
|
||
KILRET: JRST,RET
|
||
|
||
KILLA: TLNN F,QF
|
||
TLNN F,CCF
|
||
JRST ERR
|
||
MOVE R,KILC
|
||
MOVEM R,@JOBSYM ;RESTORE INIT SYMS
|
||
HRRZM R,ESTU
|
||
MOVEM R,PRGM
|
||
HRLZI T,DELO+DELI
|
||
ANDCAM T,(R) ;GET RID OF DELETE BITS IN INITIAL TABLE
|
||
AOBJN R,.+1
|
||
AOBJN R,.-2
|
||
JRST,DD1
|
||
|
||
KILL1: MOVE R,ESTU ;REMOVE UNDEFINED SYMS
|
||
JUMPGE R,UNDEF
|
||
KILL2: PUSHJ P,EVAL0
|
||
JRST RET
|
||
PUSHJ P,REMUN
|
||
JRST KILL2
|
||
|
||
REMUN: MOVE S,[(2)2] ;REMOVE ONE UNDEFINED SYM
|
||
ADDB S,ESTU
|
||
MOVE W,-2(S)
|
||
MOVEM W,(R)
|
||
MOVE W,-1(S)
|
||
MOVEM W,1(R)
|
||
POPJ P,
|
||
|
||
DS: MOVE R,DSSAV(I)
|
||
MOVEI T,DELO_-16.
|
||
DPB T,[(420200+R)]
|
||
MOVE T,1(R)
|
||
PUSHJ P,LOOK
|
||
JRST RET
|
||
JRST RET
|
||
|
||
TAG: TLNE F,CF ;DEFINE SYMBOL AS OPEN REGISTER
|
||
JRST SETNAM
|
||
MOVE W,LLOCO
|
||
HRRZM W,DEFV
|
||
TLOE F,FAF
|
||
JRST ERR
|
||
DEFIN: TLNE F,FAF
|
||
TLNN F,LTF
|
||
JRST ERR
|
||
ADEFIN: PUSHJ P,EVAL
|
||
JRST DEF1
|
||
CAMGE R,KILC
|
||
JRST DEF2 ;REDEFINE
|
||
MOVEI T,DELI_-16.
|
||
DPB T,[(420200+R)]
|
||
DEF1: MOVN R,[(2)2]
|
||
ADDB R,@JOBSYM
|
||
HRRZ T,ESTU
|
||
SUBI T,2
|
||
HRL T,ESTU
|
||
HRRM T,ESTU
|
||
SKIPGE ESTU
|
||
BLT T,-1(R)
|
||
dpy340, PUSHJ P,DISINI
|
||
DEF2: MOVE T,DEFV
|
||
MOVEM T,1(R)
|
||
MOVSI T,GLOBAL
|
||
IORB T,SYM
|
||
MOVEM T,(R)
|
||
MOVE R,ESTU
|
||
|
||
DEF3: JUMPGE R,RET ;PATCH IN UNDEFINED SYM
|
||
MOVE T,SYM
|
||
CAME T,(R)
|
||
JRST DEF4
|
||
MOVE S,DEFV
|
||
SKIPGE 1(R)
|
||
MOVNS S
|
||
PUSH P,R
|
||
MOVE R,1(R)
|
||
PUSHJ P,FETCH
|
||
JRST ERR
|
||
ADD S,T
|
||
HRRM S,T
|
||
PUSHJ P,DEP
|
||
POP P,R
|
||
PUSHJ P,REMUN
|
||
DEF4: ADD R,[(2)2]
|
||
JRST DEF3
|
||
|
||
;DISK COMMANDS HERE SO NO EVAL ARG
|
||
|
||
SWAP,[
|
||
LISTF0: JRST LISTF
|
||
|
||
LOAD0: JRST LOAD
|
||
|
||
DUMP0: JRST DUMP
|
||
];SWAP
|
||
|
||
NOSWAP,[
|
||
LISTF0==ERR
|
||
LOAD0==ERR
|
||
DUMP0==ERR
|
||
];NOSWAP
|
||
|
||
SETNAM: MOVE R,@JOBSYM
|
||
SET2: JUMPGE R,UNDEF
|
||
MOVE T,(R)
|
||
ADD R,[(2)2]
|
||
CAME T,SYM
|
||
JRST SET2
|
||
MOVEM R,PRGM
|
||
JRST RET
|
||
|
||
MULT: TLOA F,PTF+MLF ;*
|
||
DIVD: TLO F,DVF+PTF ;SINGLE QUOTE
|
||
JRST L1
|
||
|
||
ASSEM: JRST PLUS ;#
|
||
MINUS: TLO F,MF
|
||
PLUS: TLO F,PTF
|
||
JRST LIS2
|
||
|
||
LPRN: CAML P,[(LPDL-32)]
|
||
JRST,ERR
|
||
PUSH P,F ;RECURSE FOR OPEN PAREN
|
||
PUSH P,WRD
|
||
PUSH P,FRASE
|
||
PUSH P,FRASE1
|
||
AOS,PRNC
|
||
JRST,LISA
|
||
|
||
INDIRECT: MOVSI W,(@)
|
||
IORB W,WRD
|
||
TLO F,QF
|
||
JRST,LIS2
|
||
|
||
ACCF: TLNN F,COMF
|
||
HRRM T,COMWD ;COMMA
|
||
MOVE R,T
|
||
HLLZS T
|
||
|
||
LDB W1,[(331100)WRD] ; Get top 9 bits of opcode
|
||
LSH R,27 ; Shift into AC field
|
||
CAIN W1,700 ; Old-style IO instruction?
|
||
LSH R,1 ; Yes: Shift into device field
|
||
|
||
;Used to be:
|
||
; LDB W1,[(410300)WRD]
|
||
; IDIVI W1,7
|
||
; LSH R,27(W1)
|
||
|
||
ADD T,R
|
||
ADD T,WRD
|
||
TLOE F,COMF
|
||
COMWD: HRLI T,.
|
||
MOVEM T,WRD
|
||
JRST SPACE+1
|
||
|
||
SPACE: TLNE F,QF
|
||
TLO F,TIF
|
||
SPAC1: TLZ F,MF+PTF
|
||
JRST,LIS1
|
||
|
||
RPRN: MOVS T,WRD ;)
|
||
SOSGE,PRNC
|
||
JRST,ERR
|
||
POP P,FRASE1
|
||
POP P,FRASE
|
||
POP P,WRD
|
||
POP P,F
|
||
TLO F,QF
|
||
TLNE F,PTF
|
||
TLOE F,SF
|
||
JRST,RPRN1
|
||
MOVEM T,SYL
|
||
JRST,L1RPR
|
||
RPRN1: ADDB T,WRD
|
||
JRST,L1RPR-1
|
||
|
||
VARRW: SOSA LLOC ;^
|
||
TAB: PUSHJ P,PLOC
|
||
LI1B: SOS LLOC
|
||
|
||
LINEF: PUSHJ P,DEPRA ;NEXT REGISTER
|
||
TLZN F,CF
|
||
JRST LI0
|
||
LI1A: MOVE R,PLCR ;MOVE BACK IN RING BUFFER
|
||
MOVE T,LOCBF(R)
|
||
SOSGE R
|
||
MOVEI R,NLEVS-1
|
||
MOVEM R,PLCR
|
||
HRRZM T,LLOC
|
||
JRST DDT(W)
|
||
LI0: PUSHJ P,CRF
|
||
AOS T,LLOC
|
||
LI1: HRRZM T,LLOC
|
||
HRRZM T,LLOCO
|
||
PUSHJ P,PAD
|
||
MOVEI T,"/ ;SLASH
|
||
TLNE F,STF
|
||
MOVEI T,"! ;EXCLAMATION MARK
|
||
PUSHJ P,TOUT
|
||
LI2: TLZ F,ROF
|
||
PUSHJ P,LCT
|
||
MOVE R,LLOCO
|
||
PUSHJ P,FETCH
|
||
JRST ERR
|
||
TLO F,ROF
|
||
TLNE F,STF
|
||
JRST DD2
|
||
JRST CONSYM
|
||
|
||
|
||
CARR: PUSHJ P,DEPRA
|
||
MOVEI W,LI1B-DDT
|
||
TLZE F,CF
|
||
JRST LI1A
|
||
JRST DD1
|
||
|
||
OCON: TROA F,LF1+CF1 ;OPEN AS CONSTANT
|
||
OSYM: TRZ F,CF1 ;OPEN SYMBOLICALLY
|
||
TROA F,LF1
|
||
SLASH: TLZ F,STF ;TYPE OUT REGISTER
|
||
TLZE F,CF ;ALTMODE SLASH SUPPRESSES TYPEOUT
|
||
TLO F,STF
|
||
TLNE F,QF
|
||
PUSHJ P,PLOC ;QUANTITY TYPED
|
||
SLAS1: HRRZM T,LLOCO
|
||
JRST LI2
|
||
|
||
ICON: TLZE F,CF
|
||
JRST IKON
|
||
PUSHJ P,DEPRA ;\
|
||
JRST SLAS1
|
||
|
||
PLOC: CAMN T,LLOC
|
||
POPJ P,
|
||
AOS R,PLCR ;ADVANCE RING POINTER
|
||
CAIL R,NLEVS
|
||
CLEARB R,PLCR
|
||
EXCH T,LLOC
|
||
MOVEM T,LOCBF(R)
|
||
MOVE T,LLOC
|
||
HRRZS LLOC
|
||
POPJ P,
|
||
|
||
ASLASH: TLNN F,QF
|
||
JRST QUESTN
|
||
PUSH P,T
|
||
MOVEI T,"/
|
||
PUSHJ P,TOUT
|
||
POP P,T
|
||
JRST SLASH
|
||
|
||
IKON: MOVEM T,LWT(I)
|
||
PUSHJ P,EFFEC0
|
||
JRST ERR
|
||
MOVE R,T
|
||
PUSHJ P,FETCH
|
||
JRST ERR
|
||
JRST OVRD2
|
||
|
||
DEPRA: TLNE F,ROF ;IF REGISTER IS BEING CHANGED
|
||
TLNN F,QF ;REMOVE ALL PREVIOUS UNDEFINED
|
||
JRST DEPRS ;SYMBOL REFERENCES TO IT
|
||
MOVE R,ESTU
|
||
MOVEM W1,ESTU
|
||
DEPRA2: JUMPGE R,DEPRS
|
||
HRRZ W,1(R)
|
||
CAMN W,LLOCO
|
||
PUSHJ P,REMUN
|
||
ADD R,[(2)2]
|
||
JRST DEPRA2
|
||
|
||
EQUAL: TROA F,LF1+CF1 ;=
|
||
PSYM: TRZ F,CF1 ;@
|
||
TRO F,LF1
|
||
JRST CONSYM
|
||
|
||
R50PNT: MOVEM T,LWT(I) ;AMPERSANT
|
||
LSH T,-36
|
||
TRZ T,3
|
||
PUSHJ P,TOC
|
||
PUSHJ P,TSPC
|
||
MOVEI W1,LWT(I)
|
||
JRST SPT
|
||
|
||
HWRDS: MOVEI R,HLFW-TFLOT ;H
|
||
SFLOT: ADDI R,TFLOT-SATP ;F
|
||
RATP: ADDI R,SATP-IASCO ;T
|
||
ASCSET: ADDI R,IASCO-ISIXO ;"
|
||
SIXSET: ADDI R,ISIXO-PIN ;'
|
||
SYMBOL: ADDI R,PIN-FTOC ;S
|
||
CON: ADDI R,FTOC ;C
|
||
JSP W,SET
|
||
|
||
RELA: TLZE F,QF ;R
|
||
JRST,BASECH
|
||
MOVEI R,PADSO-TOC
|
||
ABSA: ADDI R,TOC ;A
|
||
JSP W,SET
|
||
|
||
BASECH: SOJLE T,ERR ;CHANGE RADIX
|
||
MOVEI R,1-10.(T)
|
||
SDEC: ADDI R,2 ;D
|
||
SOCT: ADDI R,10 ;O
|
||
JSP W,SET
|
||
|
||
SET: MOVEI W,-RELA(W)
|
||
IDIVI W,5
|
||
HRRZM R,SCH(W)
|
||
JUMPGE F,LIS1
|
||
HRRZM R,SCHM(W)
|
||
JRST RET
|
||
|
||
GO: HRLI T,(JRST)
|
||
TLC F,QF+CCF
|
||
TLCN F,QF+CCF
|
||
MOVEM T,STARTA
|
||
TLOE F,QF
|
||
JRST XEC0
|
||
SKIPE T,STARTA
|
||
|
||
XEC: TLNN F,QF ;X
|
||
JRST ,ERR
|
||
XEC0: MOVEM T,TEM
|
||
SETZM ALTPC
|
||
PUSHJ P,CRF
|
||
PUSHJ P,TTYLEV
|
||
PUSHJ P,INSRTB
|
||
TKS,[ ;Compensate for DEC brain death: XCT of JRST 2, gets wrong flags
|
||
MOVE T,TEM
|
||
LSH T,-33
|
||
CAIE T,JRST_-33
|
||
JRST XECKS
|
||
JSP T,RESTORE
|
||
JRST TEM
|
||
|
||
XECKS:
|
||
];TKS
|
||
JSP T,RESTORE
|
||
XCT TEM
|
||
XEC1: JRST DDT ;USED BY BCOM
|
||
JSR SAVE
|
||
PUSHJ P,BRKRET
|
||
PUSHJ P,CRF
|
||
JRST DD1
|
||
|
||
DQUOTE: TLNE F,CF ;IF ALTMODE TYPED,
|
||
JRST DQOT2 ;THEN SET TYPEOUT MODE
|
||
MOVEM T,LWT(I) ;DOUBLE QUOTE
|
||
;DISPATCH ENTRY FOR IN DOUBLEQUOTE MODE
|
||
IASCO: SETZM TEM2
|
||
MOVE W1,T
|
||
TDNE W1,[-200] ;SKIP IF ONLY ONE CHARACTER IN WORD
|
||
JRST TEXO1
|
||
LSH W1,1 ;THEN ASSUME IT'S RIGHT JUSTIFIED
|
||
TEXO1: MOVEI T,0
|
||
TEXO10: JUMPE W1,CPOPJ
|
||
TEXO11: LSHC T,7
|
||
TEXO12: SKIPN TEM2
|
||
JUMPE T,TEXO1
|
||
SETOM TEM2
|
||
PUSHJ P,TOUT
|
||
JRST TEXO1
|
||
|
||
SQUOTE: TLNE F,CF ;IF ALTMODE TYPED
|
||
JRST SQOT2 ;THEN SET TYPEOUT MODE
|
||
MOVEM T,LWT(I) ;SINGLE QUOTE
|
||
;DISPATCH ENTRY FOR IN SINGLEQUOTE MODE
|
||
ISIXO: MOVE W1,T
|
||
SIXO1: MOVEI T,0
|
||
JUMPE W1,CPOPJ
|
||
LSHC T,6
|
||
JUMPE T,SIXO1
|
||
ADDI T,40
|
||
PUSHJ P,TOUT
|
||
JRST SIXO1
|
||
|
||
;ENTRY FROM ALTMODE DOUBLEQUOTE
|
||
DQOT2: TRZN F,Q2F ;IF NUMBER NOT TYPED AFTER ALTMODE,
|
||
JRST ASCSET ;THEN SET TYPEOUT MODE
|
||
MOVSI W1,440700 ;OTHERWISE, DO ASCII TYPEIN
|
||
HLLZS SASEM
|
||
JRST ISTRING
|
||
|
||
;ENTRY FROM ALTMODE SINGLEQUOTE
|
||
SQOT2: TRZN F,Q2F ;IF NUMBER NOT TYPED AFTER ALTMODE
|
||
JRST SIXSET ;THEN SET TYPEOUT MODE
|
||
MOVEI W1,40 ;OTHERWISE, DO ASCII TYPEIN
|
||
HRRM W1,SASEM
|
||
MOVSI W1,440600
|
||
|
||
ISTRING:
|
||
MOVE T,WRD2 ;SO 1" DOES RIGHT THING
|
||
MOVEM T,TEM
|
||
ISTR1: PUSHJ P,IIN
|
||
CAIN T,33
|
||
JRST ISTR2
|
||
CAIN T,^Q
|
||
PUSHJ P,IN
|
||
PUSHJ P,SASEM
|
||
JRST ISTR1
|
||
|
||
ISTR2: MOVE T,TEM
|
||
SETZM WRD2
|
||
JRST MASK2
|
||
|
||
SASEM: SUBI T,0 ;CLOBBERED TO 0 OR 40
|
||
SASME: HRRI W1,TEM
|
||
IDPB T,W1
|
||
POPJ P,
|
||
|
||
;ALTMODE V
|
||
|
||
DISF:
|
||
dpy340,[
|
||
SETCMM DISON ;COMPLEMENT STATUS FLAG
|
||
JRST DISINI ;INITIALIZE DISPLAY AND RETURN
|
||
];dpy340
|
||
nodpy, POPJ P,
|
||
|
||
BP0: REPEAT NBP+1,[
|
||
0
|
||
JSA T, BCOM
|
||
0
|
||
]
|
||
IFN 1PRSW,[
|
||
TBP1: 0 ? JSA T,BCOM ? 0 ;TEMPORARY BREAK 1
|
||
TBP2: 0 ? JSA T,BCOM ? 0 ;TEMPORARY BREAK 2
|
||
];1PRSW
|
||
|
||
BP1=BP0+3
|
||
B1INS=BP1+2
|
||
BPN=.-3
|
||
|
||
;BREAKPOINT 0 LIKE OTHERS EXCEPT DOESN'T GET CHECKED ON LOC$B OR CLEARED BY $B
|
||
|
||
BCOM: 0
|
||
HRRM T,LEAV
|
||
MOVEI T,B1SKP-B1INS(T)
|
||
HRRM T,BCOM3 ;CONDITIONAL BREAK SETUP
|
||
MOVEI T,B1CNT-B1SKP(T)
|
||
HRRM T,BCOM2 ;PROCEDE COUNTER SETUP
|
||
MOVE T,BP1-B1CNT(T)
|
||
HLLM T,LEAV1 ;SAVE FLAGS FOR RESTORING
|
||
EXCH T,BCOM ;RESTORE FORMER CONTENTS OF ACCUMULATOR
|
||
|
||
BCOM3: SKIPE B1SKP ;ADDRESS MODIFIED, POINTS TO CONDITIONAL BPT INSTRUCTION
|
||
XCT @.-1
|
||
BCOM2: SOSG B1CNT ;ADDRESS MODIFIED, POINTS TO COUNT OF CURRENT BPT
|
||
JRST BREAK
|
||
|
||
MOVEM T,AC0+T
|
||
LDB T,[(331100)@LEAV]
|
||
CAIL T,264 ;JSR
|
||
CAILE T,266 ;JSA,JSP
|
||
TRNN T,700 ;UUO
|
||
JRST PROC1
|
||
CAIE T,260 ;PUSHJ
|
||
CAIN T,256 ;XCT
|
||
JRST PROC1
|
||
MOVE T,AC0+T
|
||
JRST 2,@LEAV1 ;RESTORE FLAGS AND JUMP TO .+1
|
||
|
||
LEAV: XCT B1INS ;ADDRESS MODIFIED
|
||
JRST @BCOM
|
||
AOS BCOM
|
||
JRST @BCOM
|
||
|
||
LEAV1: LEAV
|
||
|
||
BREAK: JSR SAVE
|
||
PUSHJ P,BRKRET
|
||
SOS T,BCOM3
|
||
HRRZS T
|
||
IFN 1PRSW, CAIGE T,TB1ADR
|
||
PUSHJ P,PADSO
|
||
MOVEI T,">
|
||
PUSHJ P,TOUT
|
||
SKIPG @BCOM2
|
||
PUSHJ P,TOUT ;TYPE OUT SECOND ">" IF COUNT EXHAUSTED
|
||
MOVE T,BCOM
|
||
HLLM T, SAVPI
|
||
MOVEI T,-1(T)
|
||
PUSHJ P,PAD
|
||
HRRZ T,@BCOM3
|
||
HRRM T,PROC0
|
||
HLRZ T,@BCOM3
|
||
JUMPE T,BREAK1
|
||
PUSHJ P,LCT
|
||
HLRZ T,@BCOM3
|
||
PUSHJ P,PLOC
|
||
PUSHJ P,LI1
|
||
BREAK1: HRRZ R,BCOM3
|
||
SUBI R,B1ADR
|
||
IDIVI R,3
|
||
MOVEI S,1
|
||
LSH S,1(R)
|
||
TDNN S,AUTOPI
|
||
JRST RET
|
||
PUSHJ P,LISTEN
|
||
JRST PROCD1
|
||
JRST RET
|
||
|
||
PROCEDE:
|
||
SKIPN R,ALTPC ;TURN INTO <ALT>G?
|
||
JRST PROCD0
|
||
MOVEM R,ALTPC1 ;YES
|
||
MOVE T,[JRST 2,@ALTPC1]
|
||
JRST XEC0
|
||
|
||
PROCD0: TLNN F,QF
|
||
MOVEI T,1 ;NO COUNT SPECIFIED, USE 1
|
||
MOVEM T,@BCOM2 ;MOVE TO COUNT OF SPECIFIED BPT
|
||
HRRZ R,BCOM3
|
||
PUSHJ P,AUTOP
|
||
PROCD1: PUSHJ P,CRF
|
||
PUSHJ P,TTYLEV
|
||
PROC0: HRRZI R,XEC1 ;ADDRESS MODIFIED
|
||
PUSHJ P,FETCH
|
||
JRST ERR
|
||
MOVEM T,WRD
|
||
PUSHJ P,INSRTB
|
||
MOVE T,WRD ;BREAKPOINTED INSTRUCTION TO XCT
|
||
JRST PROC2
|
||
|
||
PROC1: MOVE T,AC0+T
|
||
JSR SAVE
|
||
MOVE T,@LEAV
|
||
PROC2: MOVE R,BCOM
|
||
MOVEI W,100
|
||
MOVEM W,TEM1
|
||
JRST IXCT5
|
||
|
||
IXCT4: MOVEM R,40
|
||
MOVEI R,41
|
||
IXCT: SOSL TEM1
|
||
PUSHJ P,FETCH
|
||
JRST BPLUP
|
||
IXCT5: MOVEM T,TEM
|
||
LSH T,-33
|
||
CAIN T,254
|
||
JRST IXCT6
|
||
HRLZI 17,AC0
|
||
BLT 17,17
|
||
MOVEI T,@TEM
|
||
DPB T,[(2700)TEM]
|
||
LDB W1,[(270400)TEM]
|
||
LDB T,[(331100)TEM]
|
||
MOVEI P,PS
|
||
CAIN T,260
|
||
JRST, IPUSHJ
|
||
|
||
CAIN T,264
|
||
JRST,IJSR
|
||
CAIN T,265
|
||
JRST,IJSP
|
||
CAIN T,266
|
||
JRST,IJSA
|
||
MOVE R,TEM
|
||
KL, CAIGE T,74 ;LPMR,SPM,XCTR,XCTRI
|
||
.ELSE, CAIGE T,100
|
||
JRST,IXCT4
|
||
CAIN T,256
|
||
JRST,IXCT
|
||
|
||
IXCT6: MOVEI T,TEM
|
||
HRRM T,LEAV
|
||
MOVEI T,LEAV
|
||
JRST,RESTORE
|
||
|
||
BPLUP: PUSHJ P,BRKRET
|
||
JSR SAVE ;ALWAYS SKIPS
|
||
INC1: JSR BP0 ;USED AS "CONSTANT" IN SETTING UP FOR INSERTING BREAKPOINTS
|
||
JRST ERR
|
||
|
||
IPUSHJ: DPB W1,[(270400)CPUSHP]
|
||
CLEARM,TEM3
|
||
MOVE T,TEM
|
||
JRST,RESTR1
|
||
|
||
IJSA: MOVE T,BCOM
|
||
HRL T,TEM
|
||
EXCH T,AC0(W1)
|
||
JRST,IJSR2
|
||
|
||
IJSR: MOVE T,BCOM
|
||
HLL T,SAVPI
|
||
IJSR2: MOVE R,TEM
|
||
PUSHJ P,DEP
|
||
AOS,TEM
|
||
IJSR3: MOVE T,TEM
|
||
JRST,RESTORE
|
||
|
||
IJSP: MOVE W,BCOM
|
||
HLL W,SAVPI
|
||
MOVEM W,AC0(W1)
|
||
JRST,IJSR3
|
||
|
||
;INSERT BREAKPOINTS
|
||
|
||
INSRTB: MOVE S,INC1
|
||
INSRT1: SKIPE R,B1ADR-BP1(S) ;GET C(B<N>ADR) IN R
|
||
PUSHJ P,FETCH ;GET CONTENTS OF LOC ADDRESSED BY R INTO T
|
||
JRST INSRT3 ;LOCATION OUTSIDE OF MEMORY OR BREAKPOINT EMPTY
|
||
MOVEM T,B1INS-BP1(S) ;PUT CONTENTS IN B<N>INS
|
||
MOVE T,S ;JSR BP<N>
|
||
PUSHJ P,DEP ;DEPOSIT T IN LOCATION SPECIFIED BY R
|
||
INSRT3: ADDI S,3
|
||
CAMG S,[JSR BPN]
|
||
JRST INSRT1
|
||
IFN KS1PR,[
|
||
MOVEI T,1PRTRP
|
||
SKIPE R,1POADR ; If one-proceeding going on,
|
||
EXCH T,UPT1PN-UPT1PO(R) ; then usurp UPT1PN.
|
||
MOVEM T,1PNSV
|
||
];KS1PR
|
||
POPJ P,
|
||
|
||
;REMOVE BREAKPOINTS
|
||
|
||
REMOVB: MOVEI S,BNADR ;POINTER TO B<N>ADR
|
||
REMOV1: MOVE T,B1INS-B1ADR(S) ;INSTRUCTION AT BREAKPOINT <N>
|
||
SKIPE R,(S) ;IF THERE'S REALLY A BREAKPOINT THERE,
|
||
PUSHJ P,DEP ;THEN DEPOSIT INSTRUCTION IN USER'S CORE (SPECIFIED BY R)
|
||
REMOV3: SUBI S,3
|
||
CAIL S,B0ADR
|
||
JRST REMOV1
|
||
IFN KS1PR,[
|
||
MOVE T,1PNSV
|
||
SKIPE R,1POADR ; If UPT1PN usurped,
|
||
MOVEM T,UPT1PN-UPT1PO(R) ; then put it back now.
|
||
];KS1PR
|
||
POPJ P,
|
||
|
||
;ALTMODE B
|
||
|
||
BPS: TLZE F,QF
|
||
JRST BPS1 ;LOCATION SPECIFIED
|
||
TRZE F,Q2F
|
||
JRST BPS2 ;REMOVE SPECIFIED BREAKPOINT
|
||
MOVE T,[(B1ADR)B1ADR+1] ;REMOVE ALL BREAKPOINTS
|
||
CLEARM B1ADR
|
||
BLT T,BNADR+2
|
||
JRST DD1
|
||
|
||
;LOC$B, LOC$NB
|
||
|
||
BPS1: TRZN F,Q2F
|
||
JRST,BPS3 ;NUMBER NOT TYPED AFTER ALTMODE
|
||
MOVE R,T
|
||
TRO F,2 ;USED LATER
|
||
|
||
;GET HERE WHEN NUMBER TYPED AFTER ALTMODE
|
||
|
||
BPS2: SKIPL T,WRD2 ;BPT # NOT LEGAL...
|
||
CAILE T,10 ;IF NOT BETWEEN 0 AND 8 INCLUSIVE
|
||
JRST,ERR
|
||
IMULI T,3 ;AMOUNT OF STG PER BREAKPOINT
|
||
ADDI T,B1ADR-3 ;MAKE T POINT TO STG AREA OF SPECIFIED BREAKPOINT
|
||
TRZN F,2
|
||
JRST MASK2 ;LOCATION NOT SPECIFIED, TREAT AS SYM
|
||
EXCH R,T ;R NOW IS POINTER TO BP STG AREA, T SPECIFIED LOCATION
|
||
JRST BPS5
|
||
|
||
;LOC$B
|
||
|
||
BPS3: MOVEI R,B1ADR
|
||
BPS4: HRRZ W,(R) ;GET BPN LOCATION
|
||
CAIE W,(T) ;IF SPECIFIED LOCATION,
|
||
SKIPN (R) ;OR IF ZERO,
|
||
JRST,BPS5 ;THEN USE IT,
|
||
ADDI R,3 ;OTHERWISE INCREMENT R TO POINT TO STG OF NEXT BPT
|
||
CAIG R,BNADR ;SKIP IF TOO MANY
|
||
JRST,BPS4 ;GO LOOK AT NEXT ONE
|
||
JRST,ERR ;ALL FULL
|
||
|
||
BPS5: MOVEM T,(R) ;SET BP TO SPECIFIED LOCATION (0 MEANS NOT IN USE)
|
||
CLEARM,1(R)
|
||
CLEARM,2(R)
|
||
AUTOP: SUBI R,B1ADR ;NOW MUNG R,
|
||
IDIVI R,3 ;INTO BP NUMBER
|
||
MOVEI S,1
|
||
LSH S,1(R) ;C(S):=1_<1+BP#>
|
||
ANDCAM S,AUTOPI
|
||
TLNE F,CCF
|
||
IORM S,AUTOPI ;ALTMODE ALTMODE TYPED MEANS BPT ENCOUNTER => TYPE MESSAGE
|
||
;BUT CONTINUE (UNTIL CHARACTER TYPED AT TTY)
|
||
POPJ P,
|
||
|
||
IFN KS1PR,[
|
||
|
||
OIPBIT==:1000
|
||
|
||
1PRCNT: 0 ; If > 0, one-proceeding is going on
|
||
1POADR: 0 ; 0 or address of usurped UPT1PO
|
||
1PNSV: 0 ; Saved contents of usurped UPT1PN
|
||
|
||
CTLN: TLNE F,CF\CCF
|
||
JRST ERR ; No or support
|
||
TLNN F,QF
|
||
MOVEI T,1 ; Argument defaults to 1
|
||
JUMPLE T,ERR
|
||
MOVEM T,1PRCNT
|
||
NTS,[
|
||
RDUBR R
|
||
MOVEI R,UPT1PO(R)
|
||
];NTS
|
||
TS, MOVEI R,44 ; Just a kludge for debugging under TS
|
||
MOVEM R,1POADR ; Commence usurpation
|
||
SKIPN T,ALTPC
|
||
SOS T,BCOM
|
||
TLO T,OIPBIT
|
||
MOVEM T,ALTPC1
|
||
SETZM ALTPC
|
||
PUSHJ P,CRF
|
||
PUSHJ P,TTYLEV
|
||
PUSHJ P,INSRTB ; First, insert all breakpoints
|
||
MOVE R,ALTPC1
|
||
PUSHJ P,FETCH ; Then take a look at the next instruction
|
||
JRST CTLN1 ; (oh well, just punt)
|
||
CAML T,[JSR BP0] ; Is it a breakpoint of some sort?
|
||
CAMLE T,[JSR BPN]
|
||
JRST CTLN1 ; Nope, get going
|
||
MOVE T,B1INS-BP1(T) ; Yeah, clobber it back again
|
||
PUSHJ P,DEP
|
||
CTLN1: JSP T,RESTORE
|
||
1PRTR1: MOVE T,AC0+T ; (redundant if you fall in)
|
||
JRST 2,@ALTPC1
|
||
|
||
1PRTRP: SOSG 1PRCNT
|
||
JRST 1PRBRK
|
||
MOVEM T,AC0+T
|
||
MOVE T,@1POADR
|
||
TLO T,OIPBIT
|
||
MOVEM T,ALTPC1
|
||
MOVE T,AC0+T ; In case executing in ACs!
|
||
MOVE T,@ALTPC1 ; Peek at the next instruction
|
||
CAML T,[JSR BP0] ; Is it a breakpoint of some sort?
|
||
CAMLE T,[JSR BPN]
|
||
JRST 1PRTR1 ; Nope, get going
|
||
MOVE T,AC0+T ; Yup, abandon stepping
|
||
1PRBRK: JSR SAVE
|
||
PUSHJ P,BRKRET
|
||
MOVE T,@1POADR
|
||
SETZM 1POADR ; Cease usurpation
|
||
MOVEM T,ALTPC
|
||
HLLM T,SAVPI
|
||
SKIPLE 1PRCNT ; Abandoned because of breakpoint?
|
||
JRST PROCED ; Yes, proceed into breakpoint
|
||
MOVEI T,"> ; No, go tell user where we stopped
|
||
PUSHJ P,TOUT
|
||
PUSHJ P,TOUT
|
||
.ERR Shouldn't leave location open after 1-proceed
|
||
HRRZ T,ALTPC
|
||
PUSHJ P,PLOC
|
||
PUSHJ P,LI1
|
||
JRST RET
|
||
|
||
];KS1PR
|
||
|
||
IFN 1PRSW,[
|
||
|
||
;CONTROL-N
|
||
|
||
CTLN: TLZN F,CF
|
||
JRST ONEPRO
|
||
MOVE T,BCOM
|
||
HRLI T,1(T)
|
||
TLZE F,QF
|
||
MOVE T,WRD ;T HAS TB2ADR,,TB1ADR
|
||
HRRZM T,TB1ADR
|
||
HLRZM T,TB2ADR
|
||
JRST PROCEDE
|
||
|
||
ONEPRO: JRST ERR ;NOT HACKED YET
|
||
];1PRSW
|
||
|
||
IFNDEF CTLN, CTLN==:ERR
|
||
|
||
DEPRS: MOVEM T,LWT(I)
|
||
DEPR: MOVE R,LLOCO ;QUAN TYPED IN REGIS EXAM
|
||
TLZE F,ROF
|
||
TLNN F,QF
|
||
POPJ P,0
|
||
DEP: TRNN R,777760
|
||
JRST DEP1 ;BPT LOCATION IS AN ACCUMULATOR
|
||
MOVEM T,0(R)
|
||
POPJ P,0
|
||
|
||
DEP1: MOVEM T,AC0(R)
|
||
POPJ P,0
|
||
|
||
FETCH: MOVE T,HIGH
|
||
CAIGE T,(R)
|
||
POPJ P,
|
||
MOVE T,(R)
|
||
TRNN R,777760
|
||
MOVE T,AC0(R)
|
||
JRST CPOPJ1
|
||
|
||
FIRARG: MOVEM T,DEFV
|
||
TLO F,FAF
|
||
JRST,ULIM1
|
||
ULIM: TLO F,SAF
|
||
HRRZM T,ULIMIT
|
||
ULIM1: TLNE F,CF
|
||
JRST OVRD
|
||
TLNN F,QF
|
||
JRST,ERR
|
||
JRST,LISB
|
||
|
||
LOOK: SETZB W1,S
|
||
MOVSI W1,DELI+DELO
|
||
MOVE R,PRGM
|
||
MOVEM R,PRGM(I)
|
||
MOVSI W2,PNAME
|
||
SKIPGE T
|
||
MOVSI S,400000
|
||
MOVE W,[444400,,ENDT]
|
||
MOVEM W,TEM(I)
|
||
LEND1A: ILDB W,TEM(I)
|
||
MOVEM W,LLUP1
|
||
JRST LLUP1
|
||
ENDT: TDNN W2,(R)
|
||
TLO W1,LOCAL
|
||
SKIPL R
|
||
MOVE R,@JOBSYM
|
||
CAMN R,PRGM(I)
|
||
TLZA W1,-1
|
||
LLUP: ADD R,[2,,2]
|
||
LLUPI1: JRST LLUP1 ;OR TRNA
|
||
dpy340,[
|
||
PUSHJ P,DPYSWP
|
||
CONSZ DIS,200
|
||
JRST LLUPD
|
||
];dpy340
|
||
LLUP1: 0
|
||
JRST LEND1
|
||
CAML T,1(R)
|
||
CAML S,1(R)
|
||
JRST LLUP
|
||
HLRZ W,W1
|
||
TSNN W,(R)
|
||
TDNN W2,(R)
|
||
JRST LLUP
|
||
HRR W1,R
|
||
CAMN T,1(R)
|
||
JRST SPT
|
||
MOVE S,1(R)
|
||
JRST LLUP
|
||
|
||
dpy340,[
|
||
LLUPD: BLKO DIS,DISPTR
|
||
PUSHJ P,RECYC
|
||
CJLP1: JRST LLUP1
|
||
];dpy340
|
||
|
||
LEND1: AOS W,TEM(I)
|
||
XCT (W)
|
||
JRST LEND1A
|
||
LOOK1: MOVEM T,TEM(I)
|
||
TRNE W1,-1
|
||
SUB T,S
|
||
JRST CPOPJ1
|
||
|
||
CONSYM: MOVEM T,LWT(I)
|
||
CONSM: TRNN F,LF1
|
||
CONS1: JRST @SCH
|
||
TRNE F,CF1
|
||
JRST, FTOC
|
||
|
||
PIN: TRZ F,NAF
|
||
|
||
PUSHJ P,OPTYPE ; Look it up in the opcode table first
|
||
TRNE F,1RF ; Anything typed?
|
||
JRST PI3.1 ; Yes: proceed
|
||
MOVE T,LWT(I)
|
||
TLNN T,777000 ; Opcode 0?
|
||
JRST PI3+1 ; Yes: skip this stuff
|
||
TLC T,700000
|
||
TLCN T,700000 ; Traditional IO instruction?
|
||
JRST INOUT ; Yes: Go do it that way
|
||
PUSHJ P,LOOK ; No: look it up
|
||
|
||
;Used to be:
|
||
; TLC T,700000
|
||
; TLCN T,700000
|
||
; JRST,INOUT
|
||
; PUSHJ P,OPTYPE
|
||
; MOVSI T,777000
|
||
; AND T,LWT(I)
|
||
; JUMPE T,PI3+1
|
||
; TRNN F,1RF
|
||
; PUSHJ P,LOOK
|
||
|
||
PI3.1: TROA F,NAF
|
||
JRST HLFW
|
||
PI3: PUSHJ P,TSPC
|
||
LDB T,[(270400)LWT(I)] ;AC
|
||
JUMPE T,PI4
|
||
PUSHJ P,PAD
|
||
PI3A: XCT ",,CRF
|
||
PI4: MOVE W1,LWT(I)
|
||
MOVEI T,"@ ;AT SIGN
|
||
TLNE W1,20 ;CHECK FOR INDIRECT BIT
|
||
PUSHJ P,TOUT
|
||
PI5: HRRZ T,LWT(I)
|
||
LDB W1,[(331100)LWT(I)]
|
||
CAIL W1,240
|
||
CAILE W1,247
|
||
PUSHJ P,SPAD
|
||
PUSHJ P,PADS3A
|
||
PI7: TRZ F,NAF
|
||
LDB R,[(220400)LWT(I)] ;INDEX REGISTER CHECK
|
||
JUMPE R,PADS1 ;EXIT
|
||
PI7.1: XCT "(,CRF
|
||
MOVE T,R
|
||
PUSHJ P,PAD
|
||
MOVEI T,")
|
||
JRST,TOUT ;EXIT
|
||
|
||
HLFW: TRO F,NAF
|
||
HLRZ T,LWT(I)
|
||
PUSHJ P,PAD
|
||
XCT ",,CRF
|
||
XCT ",,CRF
|
||
SKIPA T,LWT(I)
|
||
SPAD: AOS (P)
|
||
PAD: ANDI T,777777 ;PRINT ADDRESS
|
||
JRST @AR ;PADSO OR PAD1
|
||
PADSO: JUMPE T,TOC2+1
|
||
PUSHJ P,LOOK
|
||
PADS1: POPJ P,0
|
||
MOVE W2,1(W1)
|
||
CAIGE T,100
|
||
CAIGE W2,60
|
||
JRST,PADS3
|
||
MOVEM T,TEM(I)
|
||
JUMPE W1,PAD1
|
||
PUSHJ P,SPT
|
||
XCT "+,CRF
|
||
PADS2: HRRZ T,TEM(I)
|
||
PAD1: JRST,TOC ;EXIT
|
||
|
||
PADS3: MOVE T,TEM(I)
|
||
PADS3A: TRNE F,NAF
|
||
CAIGE T,776000
|
||
JRST TOC
|
||
PADS3B: MOVNM T,TEM(I)
|
||
PADS4: XCT "-,CRF
|
||
JRST,PADS2
|
||
|
||
INOUT: TDC T,[(,-1)400000]
|
||
TDCN T,[(,-1)400000]
|
||
JRST PADS3B
|
||
HLRZ R,T
|
||
CAILE R,(CONO 774,@)
|
||
JRST HLFW
|
||
AND T,[(700340)]
|
||
PUSHJ P,LOOK
|
||
JRST,.+2
|
||
JRST,HLFW
|
||
PUSHJ P,TSPC
|
||
MOVE T,LWT(I)
|
||
AND T,[(77400)]
|
||
INOUT1: JUMPE T,PI4 ;USED BY "WORD"
|
||
PUSHJ P,LOOK ;LOOK FOR DEVICE NUMBER
|
||
JRST,PI3A
|
||
MOVE T,TEM(I)
|
||
LSH T,-30
|
||
PUSHJ P,TOC
|
||
JRST,PI3A
|
||
|
||
MASK: TLNE F,QF
|
||
JRST,MASK1
|
||
MOVEI T,MSK
|
||
;$NB ENTRY (WHERE N SPECIFIED, LOCATION NOT)
|
||
MASK2: MOVEI W,1
|
||
MOVEM W,FRASE1
|
||
JRST QUAN1
|
||
MASK1: MOVEM T,MSK
|
||
JRST,RET
|
||
|
||
OVRD: MOVSI B,-5
|
||
OVRD1: MOVE R,MSKTB(B)
|
||
AND R,LWT(I)
|
||
TDNN T,MSKTB(B)
|
||
IOR T,R
|
||
AOBJN B,OVRD1
|
||
OVRD2: CLEARM FRASE
|
||
TLZ F,TIF
|
||
CLEARM WRD
|
||
JRST MASK2
|
||
|
||
MSKTB: 777000,,
|
||
0 17,0
|
||
@
|
||
(17)
|
||
,-1
|
||
|
||
EFFEC: TLO F,LTF
|
||
HRRZ T,T
|
||
AWORD: SKIPA W,INOUT1 ;JUMPE T,
|
||
NWORD: MOVSI W,(JUMPN T,)
|
||
HLLM W,SEAR2
|
||
|
||
SEARC: TLZN F,QF
|
||
JRST,ERR
|
||
SETCAM T,WRD
|
||
MOVE T,[EQV T,WRD]
|
||
TLNE F,LTF
|
||
MOVE T,[JRST SEAR2B]
|
||
MOVEM T,SEARMD
|
||
MOVSI T,-5
|
||
SETCMM FRASE(T) ;PREVENT TYPEOUT
|
||
AOBJN T,.-1
|
||
MOVE T,ULIMIT
|
||
TLNE F,SAF
|
||
TLO F,QF
|
||
PUSHJ P,SETUP1
|
||
PUSHJ P,CRF
|
||
SEAR1: TRNN R,777760 ; Looking at ACs?
|
||
JRST SEAR1A ; Yes: Be slow
|
||
MOVE T,(R) ; No: Be fast
|
||
SEAR1B:
|
||
SEARMD: EQV T,WRD
|
||
AND T,MSK
|
||
SEAR2: JUMPE T,SEAR3 ;OR JUMPN T
|
||
SEAR2A: TRNN R,77 ; LISTEN every 100 times
|
||
JRST SEAR2D
|
||
SEAR2E: AOBJN R,SEAR1 ; Loop until LH positive...
|
||
TLNE R,-1 ; And just how did that happen?
|
||
JRST SEAR1 ; It was already positive
|
||
SEAR2C: SETCMM LWT(I) ; Counted up to 0: Done
|
||
JRST,DD1
|
||
|
||
SEAR2D: PUSHJ P,LISTEN
|
||
JRST SEAR2E
|
||
JRST SEAR2C
|
||
|
||
SEAR1A: PUSHJ P,FETCH
|
||
JRST SEAR2A
|
||
JRST SEAR1B
|
||
SEAR2B: PUSHJ P,EFFEC0
|
||
JRST SEAR2A
|
||
EQV T,WRD
|
||
ANDI T,777777
|
||
JRST SEAR2
|
||
|
||
SEAR3: PUSHJ P,FETCH
|
||
JRST ERR
|
||
MOVEM T,LWT(I)
|
||
MOVEM R,TEM2
|
||
MOVEM R,T
|
||
HRRZM R,LLOCO
|
||
PUSHJ P,PLOC
|
||
PUSHJ P,PAD
|
||
XCT "/,CRF ;SLASH
|
||
PUSHJ P,LCT
|
||
MOVE T,LWT(I)
|
||
PUSHJ P,CONSYM
|
||
PUSHJ P,CRF
|
||
SETCMM LWT(I)
|
||
SETCMM TEM(I)
|
||
SEAR4: MOVE R,TEM2
|
||
JRST, SEAR2D
|
||
|
||
EFFEC0: MOVEM R,TEM2 ;CALLED BY SEARCH AND $\
|
||
MOVEI W,100
|
||
MOVEM W,TEM(I)
|
||
EFFEC1: MOVE W,T
|
||
LDB R,[(220400)T]
|
||
JUMPE R,EFFEC2
|
||
HRRZ T,AC0(R)
|
||
ADD T,W
|
||
EFFEC2: HRR R,T
|
||
TLNN W,20 ;INDIRECT BIT CHECK
|
||
JRST EFFEC3
|
||
SOSE TEM(I)
|
||
PUSHJ P,FETCH
|
||
JRST EFFEC4
|
||
JRST EFFEC1
|
||
EFFEC3: AOS (P)
|
||
EFFEC4: MOVE R,TEM2
|
||
POPJ P,
|
||
|
||
SETUP: TLO F,LTF ;ZERO
|
||
SETUP1: MOVEI T,1(T)
|
||
TLNN F,QF
|
||
SETUP2: HRRZ T,ESTU
|
||
HRRM T,ULIMIT
|
||
HRRZ R,DEFV
|
||
TLNN F,FAF
|
||
MOVEI R,0
|
||
CAML R,ULIMIT
|
||
JRST ERR
|
||
MOVEM R,DEFV
|
||
MOVE W,R
|
||
SUB W,ULIMIT
|
||
HRLM W,R
|
||
POPJ P,0
|
||
|
||
ZERO: JUMPGE F,ERR
|
||
PUSHJ P,SETUP
|
||
ZERO1: TRNE R,777740 ;R AOBJN PNTR TO CORE TO CLEAR
|
||
JRST,ZERO2 ;T UPPER LIMIT (LAST LOC TO CLEAR+1)
|
||
TRNN R,20 ;DONT Z 20-37
|
||
CLEARM,AC0(R)
|
||
AOBJN R,ZERO1
|
||
TLNE R,-1
|
||
JRST ZERO1
|
||
JRST,DD1A
|
||
ZERO2: HRRZ S,@JOBSYM ;ONLY CLEAR CORE BELOW SYMBOL TABLE
|
||
CAILE T,(S) ;(JUST ASSUME IT'S A MOBY DDT)
|
||
MOVEI T,(S)
|
||
SETZM (R)
|
||
HRLS R
|
||
AOS R
|
||
BLT R,-1(T)
|
||
|
||
; HRRZ S,T
|
||
; HRRZ W,@JOBSYM
|
||
; CAIL S,(W)
|
||
; MOVEI S,(W)
|
||
; CAILE S,(R)
|
||
; JSP W,ZEROR
|
||
; HRRZ R,R
|
||
; CAIG R, PS
|
||
; MOVEI R, PS
|
||
; HRRZ S,T
|
||
; CAMLE S, R
|
||
; JSP W,ZEROR
|
||
JRST,DD1A
|
||
|
||
;ZEROR: HRL R,R
|
||
; CLEARM,(R)
|
||
; ADDI R, 1
|
||
; BLT R, -1(S)
|
||
; JRST,(W)
|
||
|
||
FTOC:
|
||
TOC: HRRZ W1,ODF
|
||
CAIN W1,12
|
||
JRST, TOC4
|
||
TOCA: LSHC T,-43
|
||
LSH W1,-1 ;W1=T+1
|
||
TOC1: DIVI T,@ODF
|
||
HRLM W1,0(P)
|
||
TOC3: JUMPE T,TOC2
|
||
PUSHJ P,TOCA
|
||
TOC2: HLRZ T,0(P)
|
||
ADDI T,"0
|
||
CJTOUT: JRST,TOUT ;DOES POPJ TO TOC2 OR EXIT
|
||
|
||
TOC4: MOVM W1,T
|
||
JUMPGE T,TOC5
|
||
XCT "-,CRF
|
||
TOC5: MOVEI T,0
|
||
PUSHJ P,TOC1
|
||
TPER: MOVEI T,".
|
||
JRST TOUT
|
||
|
||
SPT: MOVE T,CJTOUT
|
||
MOVEM T,SPTS(I)
|
||
MOVE T,0(W1) ;SYMBOL PRINT
|
||
MOVEM W1,DSSAV(I)
|
||
TLZ T,740000
|
||
SPT1: IDIV T,[50*50*50*50*50]
|
||
PUSHJ P,SPT2
|
||
MOVE T,W1
|
||
IMULI T,50
|
||
JUMPN T,SPT1
|
||
POPJ P,
|
||
|
||
SPT2: ADDI T,260-1
|
||
CAILE T,271
|
||
ADDI T,301-272
|
||
CAILE T,332
|
||
SUBI T,334-244
|
||
CAIN T,243
|
||
MOVEI T,256
|
||
XCT SPTS(I)
|
||
POPJ P,
|
||
|
||
BRKRET: PUSHJ P,REMOVB
|
||
TTYRET:
|
||
dpy340,[
|
||
CONI DIS,T
|
||
DPB T,[600,,DRESET]
|
||
];dpy340
|
||
IFN LPTP,[
|
||
CONI LPT,T
|
||
DPB T,[300,,LPTRST]
|
||
SKIPE LPTFLG
|
||
CONO LPT,10
|
||
]
|
||
TTYRT: MOVEI T,10
|
||
dpy340, MOVSM T,DISDON
|
||
ka,[
|
||
CONI TTY,SAVTTY
|
||
CONO TTY,400000(T)
|
||
];ka
|
||
dpy340, PUSHJ P,DISINI
|
||
XCT TTYRT
|
||
TTY1:
|
||
ka,[
|
||
MOVEI W2,40000 ;WAIT FOR LAST CHR TO BE TYPED (SO LOSERS PRGM DOESNT
|
||
CONSZ TTY,120 ;GET AN INTERRUPT..
|
||
SOJG W2,.-1
|
||
CONI TTY,W2
|
||
XOR W2,SAVTTY
|
||
ANDI W2,10 ;ATTEMPT TO RESTORE STATE OF OUTPUT DONE FLAG
|
||
XORM W2,SAVTTY
|
||
DATAI TTY,W2
|
||
HRLM W2,SAVTTY
|
||
CONO TTY,3400(T)
|
||
; CONO TTY,400000(T) ;MORE PDP6 TK KLUDGE WINNAGE
|
||
];ka
|
||
POPJ P,
|
||
|
||
TTYLEV:
|
||
dpy340,[
|
||
MOVS T,DISDON
|
||
CAIN T,@TTYRT
|
||
JRST .+3
|
||
DRESET: CONO DIS,100
|
||
DATAO DIS,[3000]
|
||
];dpy340
|
||
IFN LPTP,[
|
||
SKIPE T,LPTRST
|
||
CONO LPT,10(T)
|
||
]
|
||
ka,[
|
||
MOVE T,SAVTTY
|
||
ANDI T,17
|
||
TRNN T,10
|
||
TRO T,200
|
||
];ka
|
||
JRST TTY1
|
||
|
||
subttl variable area
|
||
|
||
WRD: 0
|
||
WRD2: 0
|
||
PRNC: 0
|
||
FRASE: 0
|
||
SYL: 0
|
||
DEN: 0
|
||
ZLWT: 0
|
||
TEM2: 0
|
||
LPTRST: 0
|
||
LPTFLG: 0
|
||
TTYFLG: -1
|
||
ESTU: LOW
|
||
ESTUT: LOW
|
||
FSV: 0
|
||
FRACT: 0
|
||
FPWR: 0
|
||
FTERM: 0
|
||
FH: 0
|
||
;FL: 0
|
||
SYM: 0
|
||
DEFV: 0
|
||
ULIMIT: 0
|
||
LLOC: 112 ;CURRENT LOCATION
|
||
LLOCO: 0
|
||
PLCR: 0
|
||
LOCBF: BLOCK NLEVS
|
||
|
||
DIS1:
|
||
ACSTG: BLOCK 10
|
||
INST: 0
|
||
LWT: 0
|
||
TEM: 0
|
||
TEM1: 0
|
||
PRGM: -NSYMS+2,,LOW+2
|
||
DSSAV: SYM
|
||
OUTSW: 0
|
||
SPTS: JRST TOUT
|
||
ALTPC: 0 ;NON-ZERO MEANS ALT-P JUMPS THERE
|
||
ALTPC1: 0
|
||
|
||
dpy340,[
|
||
DISSW: MOVE T,@-1(P)
|
||
];dpy340
|
||
|
||
SATPP: .+1
|
||
SATPT: 0
|
||
|
||
dpy340,[
|
||
DIS2:
|
||
DISACS: BLOCK DIS2-DIS1-6
|
||
SYM
|
||
DISAD
|
||
JRST TOUT
|
||
MOVSI T,(TRNA#CONSZ#CONSO)
|
||
.+1
|
||
0
|
||
];dpy340
|
||
|
||
HIGH: MEMSIZ-1
|
||
|
||
SAVPI: 0
|
||
1177
|
||
SAVTTY: 0
|
||
|
||
MSK: -1 ;INITIAL MASK FOR WORD SEARCHES
|
||
B0ADR: REPEAT 3,0 ;FOR $0B, MUST BE SPECIFIED TO BE USED (NOT SET BY
|
||
; LOC$B, NOT CLEARED BY $B)
|
||
B1ADR: 0
|
||
B1SKP: 0
|
||
B1CNT: 0 ;ONE MORE THEN # TIMES TO IGNORE ENCOUNTER OF THIS BPT
|
||
|
||
REPEAT NBP*3-3, 0
|
||
|
||
IFN 1PRSW,[
|
||
TB1ADR: 0 ? 0 ? 0
|
||
TB2ADR: 0 ? 0 ? 0
|
||
];1PRSW
|
||
BNADR=.-3
|
||
AUTOPI: 0 ;1_N ON IF LOC$$B TYPED, ON MEANS PRECEED AFTER
|
||
; TYPING BPT MSG, UNTIL CHAR. TYPED AT TTY
|
||
|
||
INFORM SAVED ACS AREA,\. ;FOR CRASH XFILE
|
||
AC0: BLOCK 17
|
||
AC17: 0
|
||
SWAP,TWENTY: BLOCK LOWFIX-20 ;DON'T MOVE FROM HERE
|
||
|
||
SCH: 0
|
||
AR: 0
|
||
ODF: 0
|
||
SCHM: PIN ;THESE 3 LOCATIONS BLT'D INTO PRECEDING 3 LOCATIONS DURING SAVE
|
||
ARM: PADSO
|
||
ODFM: 10
|
||
SARS: 0 ;NON-ZERO IF STUFF SAVED (USED BY SAVE)
|
||
FRASE1:
|
||
TEM3: 0
|
||
INSW: 0
|
||
|
||
dpy340,[
|
||
DISCNT: 0
|
||
DISPN1: 0
|
||
];dpy340
|
||
|
||
subttl save
|
||
|
||
SAVE: 0
|
||
SKIPN SARS ;IF CRUD NOT ALREADY SAVED,
|
||
JRST SAV1 ;THEN GO SAVE IT,
|
||
AOS SAVE ;OTHERWISE AOS RETURN POINT,
|
||
JRST SAV5 ;AND SAVE MINIMALLY
|
||
|
||
SAV1:
|
||
NTS,[
|
||
CONI PRS,SAVPI
|
||
CONO PRS,@SAVPI+1
|
||
];NTS
|
||
MOVEM 17,AC17
|
||
HRRZI 17,AC0
|
||
BLT 17,AC0+16
|
||
MOVE T,SAVE
|
||
HLLM T,SAVPI
|
||
SAV5: SETOM SARS ;INDICATE CRUD SAVED
|
||
MOVEI P,PS ;INITIALIZE PDL POINTER
|
||
MOVE F,[SCHM,,SCH]
|
||
BLT F,ODF
|
||
CLEARB F,I ;CLEAR FLAGS AND I
|
||
JRST @SAVE
|
||
|
||
|
||
;SEE LOW CODE FOR RESTORE
|
||
|
||
TATP: TLZE F,QF
|
||
SKIPN T
|
||
JRST ERR
|
||
MOVEI W,36.
|
||
DPB T,[300600,,SATPP]
|
||
dpy340, DPB T,[300600,,SATPP+DIS2-DIS1]
|
||
IDIV W,T
|
||
MOVEM W,SATPC
|
||
JRST RATP
|
||
|
||
SATP: MOVEI W,44
|
||
DPB W,[360600,,SATPP(I)]
|
||
MOVE W,SATPC
|
||
MOVEM T,SATPT(I)
|
||
SATPL: ILDB T,SATPP(I)
|
||
PUSHJ P,TOC
|
||
PUSHJ P,TSPC
|
||
SOJG W,SATPL
|
||
POPJ P,
|
||
|
||
SATPC: 0
|
||
|
||
subttl command dispatch table
|
||
|
||
BDISP: (301400+R)DISP
|
||
(141400+R)DISP
|
||
(1400+R)DISP
|
||
|
||
DISP: .BYTE 12.
|
||
DEFINE ZD A,B,C
|
||
A-DDT
|
||
B-DDT
|
||
-DDT+C
|
||
TERMIN
|
||
|
||
ZD ERR,ERR,L2 ; |