Trailing-Edge
-
PDP-10 Archives
-
klad_sources
-
klad.sources/dakdas.mac
There are no other files named dakdas.mac in the archive.
SUBTTL PDP-10 KA10 CENTRAL PROCESSOR SIMULATOR
;SAVE & RESTORE FIRST 15 ACS ON LIST
DEFINE SAVE15<
PUT 15
MOVEI 15,14
PUT (15)
SOJGE 15,.-1>
DEFINE RST15<
HRROI 15,-15
GET 15(15)
AOJL 15,.-1
GET 15>
;ACCUMULATORS
;1=TEMPORARY
SCAD=2 ;SHIFT COUNT ADDER
AD=3 ;ADDER
CE=4 ;CONTENTS OF E
CAC=5 ;CONTENTS OF AC
CAC1=6 ;CONTENTS OF AC+1
IR=7 ;THE INST SIMULATED
SC=10 ;SHIFT CNTR IN RIGHT HALF
FE=10 ;FLOAT EXP IN LEFT HALF
MA=11 ;18 BIT MA WITH IDX REG, MISC BITS LEFT
PC=12 ;18 BIT PC WITH IDX REG, MISC BITS LEFT
BR=13 ;36 BIT PSEUDO REGISTERS
AR=14 ;36 BIT PSEUDO REGISTERS
MQ=15 ;36 BIT PSEUDO REGISTERS
USERAC=16 ;FIRST LOC IN OBJECT PROGRAM
BOL=100
;MA SWITCHES
MT=400000 ;PRINT MACHINE TIME STATES
MS=200000 ;PRINT AT MEM STOP
SU=100000 ;STORE IN USER LOC
EXCTF=40000
EUUOF=20000
FMEN=10000
ERR=4000
NRF1=2000
MPF2=100
EXSYNC=1000
RUN=400
DSF7=40
;INITIAL, FINAL SWITCHES
FCE=400000
FCEPSE=200000
FACINH=100000
FAC2=40000
FCCLT=20000
FCCRT=10000
SAC2=4000
SCE=2000
SACINH=1000
SARBR=400
SACZ=200
PCINH=100
;BITS 29-35 IN THE IF TABLE
;INFORM THE PROGRAM WHICH REGISTERS TO PRINT.
;THE NUMBERS HAVE THE FOLLOWING SIGNIFICANCE
;INITIAL PRINT RESULTS
;0=C(AC) C(E) C(E)
;1=C(AC) C(AC)
;2=C(AC) C(E) C(AC)
;3=C(AC) C(E) C(AC) C(E)
;4=C(AC) C(AC+1) C(E) C(AC) C(AC+1)
;5=C(AC) C(AC+1) C(E) C(AC) C(AC+1) C(E)
;6=C(AC) C(AC+1) C(E) C(E)
;7=C(AC) C(AC+1) C(AC) C(AC+1)
;10=C(AC) -
;11=C(AC) C(E) -
;12=C(AC) C(C(ACR)+1 C(AC) C(C(ACR)+1
;13=C(AC) C(C(ACR) C(AC) C(C(ACR)
;14=C(AC) C(C(ACL) C(AC) C(C(ACL)
;15=C(AC) C(E) C(C(E) C(AC) C(E)
;16=C(AC) C(E) C(C(E)) C(AC) C(E) C(C(E))
;17=C(AC) C(E) C(C(E) C(AC) C(E)
;20=DON'T PRINT
DEFINE INDEX<
HLRZ IR ;INDEX REGISTER TO AR
ANDI 17
ADD USERAC
SKIPN USERAC
ADDI JA
PUT 0
ANDI 0,-1
MOVE AR,@0
GET 0
>
DEFINE FMRQA(A)<
MOVE ACA# ;MEM READ AC
ADDI A
ANDI 17
ADD USERAC
SKIPN USERAC
ADDI JA
PUT 0
ANDI 0,-1
MOVE AR,@0
GET 0
>
DEFINE FMWRA (A)<
MOVEM AR,CAC+A ;WRITE AC INTO CORE
TLNN MA,SU
JRST .+13
MOVE ACA#
ADDI A
ANDI 17
ADD USERAC
SKIPN USERAC
ADDI JA
PUT 0
ANDI 0,-1
MOVEM AR,@0
GET 0
>
DEFINE STORE (A)<
GO HUNGCK
JUMPGE MA,.+3 ;PRINTER CNTL
MOVEI 1,[ASCII /A/]
GO PRINTA
>
DEFINE STORM (A)<
GO HUNGCK
TLNN MA,MS+MT ;PRINTER CNTL
JRST .+3
MOVEI 1,[ASCII /A/]
GO PRINTA
>
DEFINE IFSWIT<
HLRZ 2,IR ;GET INITIAL AND FINAL SWITCHES
LSHC 2,-^D10
TLNE 3,400000
SKIPA 2,IFTAB(2) ;ODD
MOVS 2,IFTAB(2) ;EVEN
>
MCRQ1: MOVE MA ;MEMORY READ REQUEST
ADD USERAC
JUMPN USERAC,.+3
TRNN MA,777700
ADDI JA ;IF LESS 100,JOB AREA
PUT 0
ANDI 0,-1
MOVE AR,@0
GET 0
MOVE CE,AR
RTN
MCWR1: MOVEM AR,CE ;MEMORY WRITE REQUEST
TLNN MA,SU ;STORE IN USER ONLY IF
RTN ;SU SWITCH IS SET
MOVE MA
ADD USERAC
JUMPN USERAC,.+3
TRNN MA,777700
ADDI JA
PUT 0
ANDI 0,-1
MOVEM AR,@0
GET 0
RTN
OPDEF MCRQ [GO MCRQ1]
OPDEF MCWR [GO MCWR1]
;SIMULATE INSTRUCTION TIME CYCLE
;INSTRUCTION AND ADDRESS CALL CYCLE
IT0: SETZB SC,ADBREN# ;CLEAR SC AND AD BR + OR - EN FLAG.
SETZB MQ,IR ;MQ AND IR CLR.
SETZM AF2# ;CLR AF2.
SETZM FDF3# ;CLEAR FDF3.
SETZM FXUHLD# ;ECO49, CLEAR AR FXU HOLD
SETZM BISF# ;FIX FOR BIS SET ON BYTE START
TLZ MA,NRF1+MPF2+DSF7 ;CLEAR NRF1,MPF2,DSF7
TLNN MA,EXCTF ;EXCTF(0)?
HRRM PC,MA ;YES...MA FM PC(J)
TLNE MA,EUUOF ;EUUOF(1)?
TRO MA,1 ;YES...MA 35 SET
MCRQ ;MC RD RQ
STORM IT0
PUT MA
IT1: HLL IR,AR ;INST TO IR
TRZ MA,-1 ;CLEAR MA
TLZ MA,EXCTF+EUUOF ;CLEAR EXCTF AND EUUOF
STORE IT1
TLNN IR,17 ;IR 14-17 = 0?
IOTT1E: JRST AT3 ;YES...NO INDEX REGISTER
AT1: SETOM AF2# ;SET AF2#
MOVE BR,AR ;BR FM AR(J)
SETZ AR, ;CLEAR AR
STORE AT1
AT2: INDEX
TLNN MA, FMEN ;IS FAST MEMORY ENABLED
JRST AT2A ;NO
STORE AT2
JRST AT3
AT2A: STORM AT2
AT3: MOVE AD,AR ;AD AR+EN
ADD AD,BR ;AD BR+EN
SKIPE AF2# ;AF2 SET?
HRR AR,AD ;YES. ARRT FM AD(J)
SETZM AF2# ;CLEAR AF2
MOVE BR,AR ;BR FM AR(J)
TLZ AR,-1 ;AR LT CLR
STORE AT3
TLNN IR,20 ;INDIRECT BIT ON?
JRST AT6 ;NO.
AT4: HRRM AR,MA ;MA FM AR(J)
MCRQ ;THE IN DIRECT LOGIC
HLLZ AR
TLZ 777740
TLZ IR,37
IORM IR
STORM AT4
JRST IT1+1
AT6: TLNE IR,700000 ;IR UUO?
HRR MA,AR ;-IR UUO: MA FM AR(J)
STORE AT6
CAMGE IR,[140000000000] ;IR 134-137?
CAMG IR,[133777777777]
JRST FT0X
BYTCR1: TLZ IR,37 ;IR RT CLR.
SKIPN BISF ;BISF (2ND PART BYTE FIX) SET?
JRST FT0X ;NO. FIRST TIME THROUGH BYTE.
MOVEI 2,FACINH+FCE+3 ;YES. SECOND TIME THROUGH BYTE.
TLNE IR,2000
MOVEI 2,FCE+SACINH+SCE+3 ;DPB...TURN OFF FACINH.
JRST FT0Y
;END OF ADDRESS CYCLE
;AR=0,E
;BR=LAST REF
;MQ=0
;MA=0 OR E
;FETCH CYCLE
FT0X: HLRZ IR
LSH -11
MOVEM IRA# ;SAVE INSTRUCTION CODE.
CAIGE 200 ;IS THIS
CAIGE 140 ;A FP INST?
JRST FT0XA ;NO.
ANDI 145 ;YES.
CAIN 145 ;IS IT IMMEDIATE MODE?
JRST FT8 ;YES..FPIMM..GO TO FT8.
FT0XA: IFSWIT
FT0Y: TRNN 2,FCE+FCEPSE
JRST FT1A ;DO NOT FETCH C(E)
MCRQ ;GET THE CONTENTS OF E
TLNE MA,FMEN ;MC FM EN?
JRST FTX ;YES...FT1
FT1: STORM FT0; FCE OR [FCEPSE + (-FMEN)]
JRST FT1A
FTX: STORM FT1; FCEPSE+FMEN
FT1A: MOVE 0,IRA# ;MOVE INST CODE INTO AC0.
CAIE 0,254 ;IR A JRST?
MOVE BR,AR ;NO. BR FM AR(J).
STORE FT1A
HLRZ 0,IR
LSH 0,-5
ANDI 0,17
MOVEM 0,ACA# ;SAVE AC NUMBER.
TRNE 2,FACINH
JRST FT9 ;FETCH AC INHIBIT IS SET
;AR=0,E
;BR=(0,E) V C(E) V JRST:LAST REF
;MQ=0
;MA=E
;FETCH CYCLE CONT
FT2: SETZ AR, ;AR CLR
STORE FT2
FMRQA 0
TLNE MA,FMEN ;MC FMEN?
JRST FT2X ;YES.
STORM FT2RQ
FT2X: STORE FT3
;AR=C(AC)
;BR=(0,E) V C(E)
;MQ=0
;MA=E
FT2Y: TRNN 2,FAC2+FCCLT+FCCRT
JRST FT9 ;-(FAC2 V FCCACLT V FCCACRT)
TRNN 2,FAC2
JRST FT6 ;-FAC2
FT4: MOVE MQ,AR ;MQ FM AD(J)
SETZ AR, ;AR CLR
STORM FT4
FMRQA 1
FT4Y: TLNN MA,FMEN ;MC FMEN?
JRST FT4X ;NO.
FT5: STORM FT5
JRST FT4A
FT4X: STORM FT4RQ
FT4A: EXCH AR,MQ ;MQ FM AD(J), AR FM MQ(J)
STORE FT4A
JRST FT9
;FETCH CONT
FT6: TRNN 2,FCCLT ;FCCACRT?
JRST FT7 ;YES...POP,POPJ
ROT AR,^D18 ;AR SWAP
STORE FT6
FT7: HRRM AR,MA ;MA FM AR(J)
MOVE MQ,AR ;MQ FM AR(J)
MCRQ ;MC RD RQ
STORM FT7
JRST FT4Y
FT8: MOVS AR,AR ;IR FPIMM...AR SWAP.
STORM FT8
JRST FT0XA
FT9: TRNN 2,PCINH ;PC+1 INHIBIT ON?
HRRI PC,1(PC) ;NO. PC+1
STORE FT9
;AR=C(AC) V C(AC) SWAPPED V (0,E) V C(E)
;BR=(0,E) V C(E) V JRST: LAST REF
;MQ=0 V C(AC2) V C(C(ACLT) V C(C(ACRT)
;MA=E V C(ACLT) V C(ACRT)
;EXECUTE CYCLE DISPATCH TO THE INSTRUCTION
GROUP: HLLZ 1, IR
LSHC 1,-^D33
LSHC 2,-^D33
LSH 3,-^D33
JRST @GROUPD(1)
GROUPD: XWD 0,UUOSIM ;UU0
CAI @IR100(2)
CAI @MISDIS(2) ;MOVE, MISC, SUBROUTINE
XWD 0,SKIPJC ;SKIP JUMP COMPARE
XWD 0,BOOLE ;BOOLE
XWD 0,HALF ;HALF WORD
XWD 0,TEST ;AC BIT TEST
XWD 0,OP700 ;IN OUT
MISDIS: XWD 0,FWT ;MOVE MOVS
XWD 0,FWTN ;MOVN MOVM
XWD 0,SMUL ;MULTIPLY
XWD 0,SDIV ;DIVIDE
XWD 0,SHROT ;SHIFT ROTATE + JFFO
CAI @IR250(3) ;MISC
CAI @IR260(3) ;SUBROUTINE
XWD 0,ADDSUB ;ADD SUB
IR250: XWD 0,EXCH3 ;DISPATCH TO
XWD 0,BLTS ;IR 250 IR 257 CODES
XWD 0,AOBJX
XWD 0,AOBJX
XWD 0,JRSTS
XWD 0,JFCLS
XWD 0,XCTS
XWD 0,OP257
IR260: XWD 0,PUSHJS ;DISPATCH TO SUBROUTINE
XWD 0,PUSHS ;CALLING AND RETURNING
XWD 0,POPJS ;INSTRUCTIONS
XWD 0,POPJS
XWD 0,JSRS
XWD 0,JSPS
XWD 0,JSAS
XWD 0,JRAS
IR100: XWD 0,INSNC ;IR 100 TO 177
XWD 0,INSNC
XWD 0,INSNC
XWD 0,SBYTE ;BYTE,FSC,UFA,DFN
XWD 0,SFAD
XWD 0,SFSB
XWD 0,SFMP
XWD 0,SFDV
;STORE CYCLE
SKIPA 2,[XWD 0,-1]
SS9: SETO 2,
JRST XSS9
ST0: STORE ST0
ST1: IFSWIT
TRNN 2,SACZ ;STORE AC
JRST .+3 ;ON SELF MODE INST
TLNN IR,740
TRO 2,SACINH
XSS9: MOVE 0,ACA#
ADD USERAC
SKIPN USERAC
ADDI JA
PUT 0
ANDI 0,-1
PUT @0
MOVE CAC,@0 ;C(AC)
GET 0
MOVE 0,ACA#
ADDI 1
ANDI 17
ADD USERAC
SKIPN USERAC
ADDI JA
PUT 0
ANDI 0,-1
MOVE CAC1,@0 ;C(AC+1)
PUT @0
GET 0
CAMN 2,[-1]
JRST XSS91
MOVE MA
ADD USERAC
JUMPN USERAC,.+3
TRNN 777700
ADDI JA
PUT 0
ANDI 0,-1
TRNE 2,SCE+FCEPSE
MOVE CE,@0 ;C(E)
GET 0
XSS91: PUT CE
MOVE 0,IRA#
CAIGE 0,140
CAIG 0,133
CAIA
TRZ 2,FCEPSE
CAIE 2,-1
CAMN 2,[-1]
JRST ST99
TRNE 2,SACINH
JRST ST1A
CAIN 0,130 ;IR UFA?
JRST ST1D ;YES...FMA AC2 SET
CAIN 0,243 ;IR JFFO ?
JRST ST1D ;YES...FMA AC2 SET
FMWRA 0
JRST ST1E
ST1D: FMWRA 1
ST1E: STORM ST1
ST1A: TRNE 2,SAC2+SCE+FCEPSE+SARBR
JRST ST1B
TLNN MA,FMEN
TRNE 2,SACINH
JRST .+2
JRST ST1B
STORE ST1A
JRST ST9
ST1B: TLNE MA,FMEN
JRST ST1C
TRNN 2,SACINH
JRST ST2 ;GO ST2 FMEN(0) SACINH(0)
ST1C: TRNN 2,SARBR+SAC2 ;SACINH OR
JRST ST1F ;FM(1) AND NOT SARBR OR SAC2
TRNE 2,SCE+FCEPSE ;SACINH OR
HALT . ;FM(1) AND SCE OR FCEPSE
ST2: TRNE 2,SARBR ;SAR NE BR?
MOVE AR,BR ;YES..AR FM AD(J) ; BR
STORE ST2
TRNN 2,SAC2+SCE+FCEPSE+SARBR
JRST ST9
TRNN 2,SCE+FCEPSE+SARBR
JRST ST7
TRNE 2,SARBR
JRST ST3
TRNN 2,FCEPSE
JRST ST6
ST5: MCWR ;STORE PAUSE CYCLE
STORM ST5
ST6A: STORE ST6A
TRNN 2,SAC2
JRST ST9
ST7: MOVE AR,MQ ;AR FM MQ(J)
STORE ST7
ST8: FMWRA 1
STORM ST8
JRST ST9
ST2B: TRNN 2,SCE
JRST ST2C
ST6: MCWR ;MEM WRITE
STORM ST6
JRST ST6A
ST2C: TRNN 2,SARBR
JRST ST2D
ST3: STORE ST3
TRNN 2,FCEPSE
JRST ST6
JRST ST5
ST2D: TRNN 2,SAC2
JSP 1,SIMER ;SIMULATE ERROR
TRNN 2,SCE+FCEPSE+SARBR
JRST ST7
JSP 1, SIMER
ST1F: TRNE 2,FCEPSE
JRST ST5
TRNE 2,SCE
JRST ST6
JRST SIMER
ST99: CAIE 2,-1
JRST ST9
MCWR
ST9: STORE ST9
ST9E: GET 3
GET 2
GET 1
GET 0
RTN
SIMER: TLO MA,ERR ;SIMULATE ERROR
JRST ST9E
;FULL WORD TRANSFERS 20X AND 21X CODE
FWT: TLNE IR,4000 ;MOVE OR MOVS
ROT AR,^D18 ;MOVSX...AR RM AR SW(J)
FWTET0: STORE ET0
JRST ST1
FWTN: TLNE IR,4000 ;MOVN OR MOVM
JUMPGE AR,FWTET0 ;MOVM AND AR POSITIVE
JFCL 17,.+1
SETCM AD,AR ;AD AR-EN SET
ADDI AD,1 ;AD CRY36 SET
MOVE AR,AD ;AR FM AD(J)
MTF: JOV MOV
JCRY1 MCRY1
JCRY0 MCRY0
JRST FWTET0
MOV: TLO PC,AROV
JRST MTF+1
MCRY1: TLO PC,CRY1
JRST MTF+2
MCRY0: TLO PC,CRY0
JRST FWTET0
;INSTRUCTIONS NOT YET CODED
INSNC: STORE NC
JRST ST1
;SIMULATE UUO'S
UUOSIM: HLL AR,IR ;ARLT FM IR0-12(1)
TLO MA,EXCTF+EUUOF ;EXCTF AND EUUOF SET
TRO MA,40 ;MA 30 SET
MOVEM AR,OFFSET+40 ;PATCH FOR UUO'S
JRST FWTET0 ;YES. PRINT ET0..GO TO ST1
;OP CODE 250 EXCH
EXCH3: ROTC BR,^D36 ;AR FM AD(J), BR FM AR(J)
JRST FWTET0 ;PRINT ET0..GO TO ST1
;OP CODE 252 AND 253 AOBJX
AOBJX: JSP 2,PUSET0 ;AD AR+EN,AD+1 BOTH
MOVE AR,AD ;AR FM AD(J)
TLNE IR,1000
JUMPL AR,AOBJJ ;AOBJN AND AD0(1)
TLNN IR,1000
JUMPGE AR,AOBJJ ;AOBJP AND AD0(0)
JRST FWTET0 ;PRINT ET0...GO TO ST1
AOBJJ: HRR PC,MA ;PC FM MA(J)
JRST FWTET0 ;PRINT ET0...GO TO ST1
JRSTS: MOVEM PC,TEMP#
HRR PC,MA ;MA FM PC(J)
HRR MA,TEMP# ;PC FM MA(J)
TLNE IR,40 ;IR12(1)?
TLO MA,EXSYNC ;YES...SET USER MODE BIT
TLNE IR,200 ;IR10(1)?
TLZ MA,RUN ;YES..HALT INSTRUCTION..(CLR RUN)
TLNE IR,400 ;IR9(1)?
TLZ MA,0 ;YES..RELEASE PI CHANNEL
TLNN IR,100 ;IR11(1)?
JUMPA JRSET0
TLZ PC,770140 ;YES..AR FLAGS FM BR(J)
MOVSI 770140
AND BR
IORM PC
JRSET0: STORE ET0
JUMPA ST1
;OP COPE 255 JFCL
JFCLS: SETZ
TLNE IR,40 ;IR BIT 12(1)?
TLZN PC,FOV ;YES. CLEAR FOV AND SET
CAIA ;AC0 FOR PC TRANSFER
SETO ;IF FOV WAS SET.
TLNE IR,100 ;IR BIT 11(1)?
TLZN PC,CRY1 ;YES. CLEAR CRY1 AND SET
CAIA ;AC0 FOR PC TRANSFER
SETO ;IF CRY1 WAS SET
TLNE IR,200 ;IR BIT 10(1)?
TLZN PC,CRY0 ;YES. CLEAR CRY0 AND SET
CAIA ;AC0 FOR PC TRANSFER
SETO ;IF CRY0 WAS SET
TLNE IR,400 ;IR BIT 9(1)?
TLZN PC,AROV ;YES. CLEAR AROV AND SET
CAIA ;AC0 FOR PC TRANSFER
SETO ;IF AROV WAS SET.
SKIPGE ;IF AC=0 NO PC TRANSFER
HRR PC,MA ;PC FM MA(J)
JRST FWTET0 ;PRINT ET0..GO TO ST1
;OP CODE 256 XCT
XCTS: TLO MA,EXCTF ;SET A FLOP TO INH PC TO MA
JRST FWTET0 ;PRINT ET0...GO TO ST1
;OP CODE 257 NOT PRESENTLY USED
OP257: JRST ST1
;OP CODE 260,261 PUSH,PUSHJ
PUSHJS: JSP 2,PUSET0 ;AD AR+EN, AD+1 BOTH
SKIPGE 1 ;AD CRY0?
SETOM PDLOVW# ;YES. CPA PDLOV SET
MOVE AR,PC ;AR FM PC,FLAGS(J)
TLZ PC,BIS ;CLEAR BIS
MOVE MQ,AD ;MQ FM AD(J)
HRR PC,MA ;PC FM MA(J)
STORE ET0
MOVE BR,AR ;BR FM AR(J)
MOVE AR,MQ ;AR FM MQ(J)
STORE ET1
HRR MA,AR ;MA FM AR(J)
PUSET2: STORE ET2
JRST ST1
PUSHS: JSP 2,PUSET0 ;PUSH
SKIPGE 1
SETOM PDLOVW ;CPA PDLOV SET
MOVE AR,AD ;AR FM AD(J)
STORE ET0
HRR MA,AR ;MA FM AR(J)
PUSET1: STORE ET1
JRST ST1
PUSET0: MOVE 1,AR
MOVE AD,AR ;AD AR+EN SET
ADD AD,[1000001] ;AD+1 BOTH
XOR 1,AD
JRST (2)
;OP CODE 262,263 POP,POPJ
POPJS: MOVE AD,AR ;AD AR+EN SET
ADD AD,[-1] ;AD BR + AND - EN
SUB AD,[1000000] ;AD-1 LH SET
XOR AR,AD
SKIPGE AR ;-AD CRY0?
SETOM PDLOVW ;YES. SET CPA PDLOV.
MOVE AR,MQ ;AR FM MQ(J)
MOVE MQ,AD ;MQ FM AD(J)
STORE ET0
TLNN IR,1000
JRST POPS ;A POP INSTRUCTION
POPJS1: HRR MA,AR ;MA FM AR(J)
MOVE AR,MQ ;AR FM MQ(J)
STORE ET1
HRR PC,MA ;PC FM MA(J)
JRST PUSET2 ;PRINT ET2..GO TO ST1
POPS: EXCH AR,BR ;AR FM AD(J), BR FM AR(J)
STORE ET1
HRR MA,AR ;MA FM AR(J)
MOVE AR,MQ ;AR FM MQ(J)
JRST PUSET2 ;PRINT ET2..GO TO ST1
;OP CODE 264 JSR
JSRS: MOVE AR,PC ;ARRT FM PC(J),ARLT FLAGS(J)
TLZ PC,BIS ;CLEAR BIS
HRR PC,MA ;PC FM MA(J)
STORE ET0
HRRI PC,1(PC) ;PC+1
JRST PUSET2 ;PRINT ET2..GO TO ST1
;OP CODE 265 JSP
JSPS: MOVE AR,PC ;ARRT FM PC(J),ARLT FM FLAGS(J)
TLZ PC,BIS ;CLEAR BIS
HRR PC,MA ;PC FM MA(J)
JRST FWTET0 ;PRINT ET0..GO TO ST1
;OP CODE 266 JSA
JSAS: MOVE BR,AR ;BR FM AR(J)
HRR AR,PC ;ARRT FM PC(J)
HRR PC,MA ;PC FM MA(J)
STORE ET0
HRL AR,AR ;ARLT FM ARRT(J)
HRR AR,PC ;ARRT FM PC(J)
STORE ET1
HRRI PC,1(PC) ;PC+1
MOVSS AR ;AR SWAP
JRST PUSET2 ;PRINT ET2..GO TO ST1
;OP CODE 267 JRA
JRAS: MOVE AR,BR ;AR FM AD(J)
STORE ET0
HRR MA,AR ;MA FM AR(J)
MOVE AR,MQ ;AR FM MQ(J)
STORE ET1
HRR PC,MA ;PC FM MA(J)
JRST PUSET2 ;PRINT ET2..GO TO ST1
;CODE 270 ADD SUB
ADDSUB: JFCL 17,.+1 ;CLR ALL FLAGS
MOVE AD,AR
TLNE IR,4000 ;IR SUBTRACT?
SUB AR,BR ;YES.
TLNN IR,4000 ;IR ADD?
ADD AR,BR ;YES.
ASTF: JOV ASOVS
JCRY1 ASCRY1
JCRY0 ASCRY0
JRST FWTET0 ;PRINT ET0..GO TO ST1
ASOVS: TLO PC,AROV
JRST ASTF+1
ASCRY1: TLO PC, CRY1
JRST ASTF+2
ASCRY0: TLO PC,CRY0
JRST FWTET0 ;PRINT ET0..GO TO ST1
;EXECUTE CYCLE 3XX CODES SKIP, JUMP, CAM
SKIPJC: SETZ 0,
EXCH 0,IRA
CAME 0,[SOS_-^D27]
JRST .+3
SOS AR ;BUG FIX FOR FLAGS ON SOS
JRST ASTF1
CAME 0,[SOJ_-^D27]
JRST .+3
SOJ AR, ;BUG FIX FOR FLAGS ON SOJ
JRST ASTF1
EXCH 0,IRA
SETCM AD,AR
HLRZM IR,2 ;AC 2 = DISPATCHER
LSH 2,-^D13
MOVEI 1,1
TLNE IR, 60000 ;IS IT A JUMP INSTRUCTION
TLNE IR,10000
SETZ 1, ;NO A SKIP
XCT SJCTAB-14(2) ;ADD, SUBTRACT, OR DO NOTHING
SETCMM AD ;RESTORE NUMBERS
PUT AD
CAMGE IR,[XWD 320000,0]
JRST KM3
KM: TLNE AD,400000
SETO 0,
JFCL 17,.+1
ASH AD,^D36 ;SET OV IF NOT ZERO
MOVE AD,(P)
TLNE IR,1000
JRST KM2
KM1: TLNN IR,2000
JRST PCSK+1
JOV .+2
PCSK: SETCA 1, ;IR7(1) AND AD=0
TLNN IR,4000
SETCA 1, ;NEGATE SKIP ACTION ON IR6
EXCH 0,IRA
CAMN 0,[CAML_-^D27] ;BUG FIX FOR MAX POS AND MAX NEG # COMP
JRST CAMSK0
CAMN 0,[CAMLE_-^D27]
JRST CAMSK1
CAMN 0,[CAMG_-^D27]
JRST CAMSK2
CAMN 0,[CAMGE_-^D27]
JRST CAMSK3
CAMN 0,[CAMN_-^D27]
JRST CAMSK4
CAMN 0,[SKIPN_-^D27]
JRST CAMSK5
XCT STAB(1)
PCSK1: EXCH 0,IRA
TLNN IR,60000
JRST SJCET0-1 ;A CAM OR CAI INST
XOR AD,AR
TLNE AD,400000 ;FIX UP
TLO PC,CRY0 ;THE CRY0
TLNE AD,200000 ;AND CRY1 FLAGS
TLO PC,CRY1 ;FOR THE SKIP/JUMP
GET AR ;INST AD GOES TO AR
SJCET0: JRST FWTET0 ;PRINT ET0..GO TO ST1
ASTF1: EXCH 0,IRA
JRST ASTF
KM2: SKIPE 0
JRST PCSK
JRST KM1
KM3: TLNE AD,400000
JRST KM4
JCRY0 .+3
JCRY1 KM+1
JRST KM+2
JCRY1 KM+2
JRST KM+1
KM4: JCRY0 .+3
JCRY1 KM+2
JRST KM+1
JCRY1 KM+1
JRST KM+2
ROT
ROT
STAB: HRRI PC,1(PC)
HRR PC,MA
SJCTAB: ADD AD,BR
ROT
SUBI AD,1
ADDI AD,1
CAMSK0: CAML AR,BR
JRST PCSK1
AOS PC
JRST PCSK1
CAMSK1: CAMLE AR,BR
JRST PCSK1
AOS PC
JRST PCSK1
CAMSK2: CAMG AR,BR
JRST PCSK1
AOS PC
JRST PCSK1
CAMSK3: CAMGE AR,BR
JRST PCSK1
AOS PC
JRST PCSK1
CAMSK4: CAMN AR,BR
JRST PCSK1
AOS PC
JRST PCSK1
CAMSK5: SKIPE AR
AOS PC
JRST PCSK1
;BOOLE OPERATIONS 4XX CODES
BOOLE: HLRZM IR,2 ;IR BITS FOR BOOLE 0-17
LSH 2, -^D11 ;FOR DISPATCH AT EF0
BEF0: MOVSS AR ;SWAP HAVES TO AVOID
MOVSS BR ;TROUBLES COMMON TO TEST GROUP
MOVE 1,[-1] ;TO AC1
TDC 1, BR ;CONTENTS OF BR NOT
BET0: XCT B0TAB-BOL(2)
MOVSS AR ;RESTORE VALUES
MOVSS BR ;TO AR, BR
CAIE 2,BOL+2 ;BOOLE 2?
CAIN 2,BOL+10 ;BOOLE 10?
JRST BFT1 ;YES. GO TO BFT1...E LONG.
CAIE 2,BOL+13 ;BOOLE 13?
CAIN 2,BOL+16 ;BOOLE 16
JRST BFT1 ;YES. GO TO BFT1...E LONG.
JRST FWTET0 ;NO. PRINT ET0..GO TO ST1
STORE ET0
BFT1: MOVE AD,BR
CAIE 2,BOL+10
CAIN 2,BOL+16
TSC AD,[-1] ;COMP ADDER BOL 10,16
STORE ET1
BET1: SETCM 1,AD
CAIE 2,BOL+2
CAIN 2,BOL+10
TDZ AR,1 ;ADDER AND BOL2,10
CAIE 2,BOL+13
CAIN 2,BOL+16
TDO AR,AD ;ADDER IOR BOL 13,16
JRST PUSET2 ;PRINT ET2..GO TO ST1
B0TAB: MOVE AR,[0] ;BOOLE 0
TDZ AR,1 ; 1
TDC AR,[-1] ; 2
MOVE AR,BR ; 3
TDZ AR,BR ; 4
CAI ; 5
TDC AR,BR ; 6
TDO AR, BR ; 7
TDC AR,[-1] ; 10
TDC AR,1 ; 11
TDC AR,[-1] ; 12
TDC AR,[-1] ; 13
MOVE AR,1 ; 14
TDO AR,1 ; 15
TDC AR,[-1] ; 16
MOVE AR,[-1] ; 17
;EXECUTE CYCLE HALF WORD TRANSFERS 5XX CODES
HALF: TLNN IR,2000
EXCH AR,BR
MOVE AD,BR
TLNE IR,32000
JRST HEF0 ;HXX (O,Z,E)X
TLNN IR,4000
JRST HEF0
STORE ET0
GO HAFTR ;DO THE TRANSFER TO AR
JRST PUSET1 ;PRINT ET1..GO TO ST1
HEF0: TLNN IR,30000
JRST HET0
SETZ AD,
TLNN IR,10000
JRST HEF4
TLNN IR,20000
JRST HET0
TLNN IR,40000
JRST HEF2
TLNN IR,4000
JRST HEF3
HEF1: JUMPL AR,HEF4
JRST HET0
HEF2: TLNN IR,4000
JRST HEF1
HEF3: TRNE AR,400000
HEF4: SETCA AD,
HET0: GO HAFTR ;DO THE TRANSFER TO AR
JRST FWTET0 ;PRINT ET0..GO TO ST1
HAFTR: MOVEI 0,-1 ;DO THE HALF TRANSFERS
TLNE IR,40000 ;HXLXX: 0=0,-1
ROT ^D18 ;HXRXX: 0=-1,0
TLNE IR,4000
TSZ AR,0 ;HRLXX,HLRXX
TLNE IR,4000
TSC AR,AR ;HRLXX, HLRXX
TDZ AR,0
TSZ AD,0
TDO AR,AD ;COMBINED TERMS
RTN
;EXECUTE CYCLE TEST INSTRUCTIONS CODE 6XX
TEST: HLLZ 2,IR ;LOOK AT BIT 8
ROT 2,^D8
SKIPGE 2
ROT AR,-^D18
STORE ET0
TEF1: LSH 2,-3
MOVE AD,BR
AND BR, AR ;ZEROS ONES COMP
XCT TTAB0-30(2) ;OR DO NOTHING
TET1: STORE ET1
TEF2: MOVE AD,BR
HLLZ 1,IR
ROT 1,^D8
SKIPGE 1
ROT AR,^D18 ;TLXX OR TSXX
ANDI 1,3
JUMPE 1,TET2 ;NULL SKIP MODE
CAIN 1,1
JUMPE AD,TSKIP ;E SKIP MODE AND ZERO
CAIN 1,3
JUMPN AD,TSKIP ;N SKIP MODE AND NOT ZERO
CAIN 1,2
JRST TSKIP ;A SKIP MODE
TET2: JRST PUSET2 ;PRINT ET2..GO TO ST1
TSKIP: HRRI PC,1(PC)
JRST PUSET2 ;PRINT ET2...GO TO ST1
TTAB0: CAI
ANDCM AR,AD
XOR AR,AD
IOR AR,AD
;I/O INSTRUCTION PROCESS
OP700: LDB 1,[POINT 3,IR,12] ;GET CODE
LDB 0,[POINT 10,IR,9] ;GET DEVICE
CAIN 1624
JRST @TTIO(1) ;TTY I/O
CAIN 1601
JRST @PIIO(1) ;PI
CAIN 1600
JRST @APRIO(1) ;APR
JRST ST1 ;ALL ELSE
TTIO: ST1 ;BLKI
TTYDI ;DATAI
ST1 ;BLKO
TTYDO ;DATAO
TTYCO ;CONO
TTYCI ;CONI
TTYCNZ ;CONSZ
TTYCNO ;CONSO
PIIO: ST1 ;BLKI
PIDI ;DATAI
ST1 ;BLKO
PIDO ;DATAO
PICO ;CONO
PICI ;CONI
PICNZ ;CONSZ
PICNO ;CONSO
APRIO: ST1 ;BLKI
APRDI ;DATAI
ST1 ;BLKO
APRDO ;DATAO
APRCO ;CONO
APRCI ;CONI
APRCNZ ;CONSZ
APRCNO ;CONSO
;TELETYPE FUNCTIONS
TTYDI: TTCALL 2,AR ;INPUT CHAR
JRST .+1
MOVE TTYST#
TRO 40 ;SET INPUT DONE
TRZ 100 ;CLEAR INPUT BUSY
MOVEM TTYST
JRST ST1
TTYDO: MOVE MA
ADDI OFFSET
ANDI -1
TTCALL 1,@0 ;OUTPUT CHAR
MOVE TTYST
TRO 10 ;SET OUTPUT DONE
TRZ 20 ;CLEAR OUTPUT BUSY
MOVEM TTYST
JRST ST1
TTYCO: HRRZ BR
TRZ 773600
IORM TTYST
LSH BR,-4
TRZ BR,777607
ANDCAM BR,TTYST
JRST ST1
TTYCI: MOVE AR,TTYST
TTCALL 13,0 ;SKIP IF CHAR WAITING
TRZA AR,100 ;NO CHAR, CLEAR INPUT BUSY
TRO AR,100 ;CHAR, SET INPUT BUSY
MOVEM AR,TTYST
JRST ST1
TTYCNZ: MOVE TTYST
TTCALL 13,0
TRZA 100
TRO 100
MOVEM TTYST
TRNN 0,(BR)
AOS PC
JRST ST1
TTYCNO: MOVE TTYST
TTCALL 13,0
TRZA 100
TRO 100
MOVEM TTYST
TRNE 0,(BR)
AOS PC
JRST ST1
;APR FUNCTIONS
APRDI: MOVE AR,SWITCH
MOVEI 2,SACINH+SCE
JRST XSS9
APRDO: MOVE MA
ADDI OFFSET
ANDI -1
MOVE 0,@0
MOVEM 0,APRDWD#
JRST ST1
APRCO: MOVEM BR,APCOWD#
JRST ST1
APRCI: MOVE AR,APCIWD#
JRST ST1
APRCNZ: MOVE APCIWD
TDNN 0,BR
AOS PC
JRST ST1
APRCNO: MOVE APCIWD
TDNE 0,BR
AOS PC
JRST ST1
;PI FUNCTIONS
PIDI: JRST ST1
PIDO: PUT 1
PUT 2
PUT 3
MOVEI 2,"!" ;PRINT "!"
TTCALL 1,2
MOVE MA
ADDI OFFSET
ANDI -1
MOVE 2,@0
MOVEI 1,^D12
PIDO1: MOVE 3,2
ROT 3,3
ANDI 3,7
ADDI 3,"0"
TTCALL 1,3 ;PRINT 12 OCTAL DIGITS
LSH 2,3
SOJG 1,PIDO1
MOVEI 2,15
TTCALL 1,2 ;CR
MOVEI 2,12
TTCALL 1,2 ;LF
GET 3
GET 2
GET 1
JRST ST1
PICO: HRRZM BR,PICOWD#
JRST ST1
PICI: MOVE AR,PICIWD#
JRST ST1
PICNZ: MOVE PICIWD
TDNN 0,BR
AOS PC
JRST ST1
PICNO: MOVE PICIWD
TDNE 0,BR
AOS PC
JRST ST1
;SIMULATOR SYMBOL TABLE
DEFINE INX (A)
<
ASCII /A/>
TBLMUO: INX MUUO
TBLLUO: INX LUUO
TBLFLT: INX FAD
INX FADR
INX FSB
INX FSBR
INX FMP
INX FMPR
INX FDV
INX FDVR
TBLBYT: INX UFA
INX DFN
INX FSC
INX IBP
INX ILDB
INX LDB
INX IDPB
INX DPB
TBLMV: INX MOVE
INX MOVS
INX MOVN
INX MOVM
INX IMUL
INX MUL
INX IDIV
INX DIV
INX ADD
INX SUB
TBLMOV: ASCII / /
INX I
INX M
INX S
TBLMO: INX ASH
INX ROT
INX LSH
INX JFFO
INX ASHC
INX ROTC
INX LSHC
INX ERR
INX EXCH
INX BLT
INX AOBJP
INX AOBJN
INX JRST
INX JFCL
INX XCT
INX ERR
INX PUSHJ
INX PUSH
INX POP
INX POPJ
INX JSR
INX JSP
INX JSA
INX JRA
TBLAD1: ASCII / /
INX L
INX M
INX B
ASCII / /
INX I
INX M
INX B
TBLCOM: INX CAI
INX CAM
INX JUMP
INX SKIP
INX AOJ
INX AOS
INX SOJ
INX SOS
TBLCM: ASCII / /
INX L
INX E
INX LE
INX A
INX GE
INX N
INX G
TBLBOL: INX SETZ
INX AND
INX ANDCA
INX SETM
INX ANDCM
INX SETA
INX XOR
INX IOR
INX ANDCB
INX EQV
INX SETCA
INX ORCA
INX SETCM
INX ORCM
INX ORCB
INX SETO
H: INX H
TBLH: INX LL
INX RL
INX LLZ
INX RLZ
INX LLO
INX RLO
INX LLE
INX RLE
INX RR
INX LR
INX RRZ
INX LRZ
INX RRO
INX LRO
INX RRE
INX LRE
T: INX T
TBLTA: INX RN
INX DN
INX RZ
INX DZ
INX RC
INX DC
INX RO
INX DO
TBLTA1: ASCII / /
INX E
INX A
INX N
TBLTB: INX LN
INX SN
INX LZ
INX SZ
INX LC
INX SC
INX LO
INX SO
TBLCON: INX BLKI
INX DATAI
INX BLKO
INX DATAO
INX CONO
INX CONI
INX CONSZ
INX CONSO
PNTINS: SETZM CONNF#
MOVE 1,IRA# ;MOVE THE INST CODE TO AC1.
ANDI 1,77
SETZ 2, ;CLEAR AC2.
MOVE 0,IRA
CAIL 0,700
JRST CONN
CAIL 0,600
JRST TTST
CAIL 0,500
JRST HTST
CAIL 0,400
JRST BOTST
CAIL 0,300
JRST COMTST
CAIL 0,200
JRST MOVTST
CAIL 0,140
JRST FLTST
CAIL 0,130
JRST BYTST
CAIL 0,40
JRST MUUOST ;MUUO 40-77
JUMPE 0,MUUOST ;MUUO 0
JRST LUUOST ;LUUO 1-37
MUUOST: MOVEI 0,TBLMUO
JRST OUT
LUUOST: MOVEI 0,TBLLUO
JRST OUT
FLTST: ANDI 1,37 ;FLOATING POINT
ROT 1,-2
MOVEI 0,TBLFLT(1)
PNTA
ROT 1,2
ANDI 1,7
MOVEI 0,TBLAD1(1)
OUT: PNTA
RTN
BYTST: ANDI 1,7 ;UFA,DFN,FSC,BYTE
MOVEI 0,TBLBYT(1)
JRST OUT
MOVTST: CAIGE 1,70
CAIGE 1,40
JRST .+3 ;MOVE,ADD,SUB,MUL,+ETC.
MOVEI 0,TBLMO-40(1) ;SHIFTS,PUSH,POP,+ETC.
JRST OUT
ROTC 1,-2
CAIL 1,10
SUBI 1,6 ;ADD,SUB.
MOVEI 0,TBLMV(1)
PNTA
ROTC 1,2
CAIL 1,20
JRST IMLTST
ANDI 1,3
MOVEI 0,TBLMOV(1)
JRST OUT
IMLTST: ANDI 1,3 ;IMUL,MUL,IDIV,DIV
MOVEI 0,TBLAD1+4(1)
JRST OUT
COMTST: ROT 1,-3 ;MEM AND AC MOD AND TEST.
MOVEI 0,TBLCOM(1)
PNTA
ROT 1,3
ANDI 1,7
MOVEI 0,TBLCM(1)
JRST OUT
BOTST: ROT 1,-2 ;BOOLE
MOVEI 0,TBLBOL(1)
PNTA
ROT 1,2
ANDI 1,3
MOVEI 0,TBLAD1+4(1)
JRST OUT
HTST: MOVEI 0,H ;HALF WORD TRANSFERS
PNTA
ROT 1,-2
MOVEI 0,TBLH(1)
PNTA
ROT 1,2
ANDI 1,3
MOVEI 0,TBLMOV(1)
JRST OUT
TTST: MOVEI 0,T ;TEST
PNTA
TRNE 1,1
JRST TTODD
ROT 1,-3
MOVEI 0,TBLTA(1)
TTSTA: PNTA
ROT 1,2
ANDI 1,3
MOVEI 0,TBLTA1(1)
JRST OUT
TTODD: ROT 1,-3
MOVEI 0,TBLTB(1)
JRST TTSTA
CONN: SETOM CONNF
HLRZ 1,IR
ROT 1,-5
ANDI 1,7 ;I/O.
MOVEI 0,TBLCON(1)
JRST OUT
;INITIAL AND FINAL SWITCH TABLE
IFTAB: REPEAT 40,
<XWD FACINH+PCINH+SACINH+SCE,FACINH+PCINH+SACINH+SCE>
REPEAT 14,<XWD 10,10>
IF130: XWD FCE+5,FCEPSE+SARBR+3
XWD 1,FCEPSE+FACINH+0
XWD FACINH+16+FCEPSE+PCINH,FCE+16+PCINH+FACINH
XWD FACINH+SACINH+FCEPSE+PCINH+SCE+16,SACINH+FCE+SCE+PCINH+16+FACINH
REPEAT 3,
< XWD FCE+2,FCE+SAC2+4
XWD SCE+FCE+SACINH,FCE+SCE+3
XWD FCE+2,1
XWD SCE+FCE+SACINH,FCE+SCE+3>
IR170: XWD FCE+2,FCE+FAC2+SAC2+4
XWD SCE+FCE+SACINH,FCE+SCE+3
XWD FCE+2,1
XWD SCE+FCE+SACINH,FCE+SCE+3
IR200: XWD FCE+2+FACINH,FACINH+1
XWD SACINH+SCE,FACINH+FCEPSE+SACZ+3
XWD FCE+2+FACINH,FACINH+1
XWD SACINH+SCE,FACINH+FCEPSE+SACZ+3
XWD FCE+2+FACINH,FACINH+1
XWD SACINH+SCE,FACINH+FCEPSE+SACZ+3
XWD FCE+2+FACINH,FACINH+1
XWD SACINH+SCE,FACINH+FCEPSE+SACZ+3
IR220: XWD FCE+2,7
XWD FCE+SACINH+SCE,FCE+SCE+3
XWD FCE+SAC2+4,SAC2+7
XWD FCE+SACINH+SCE,FCE+SAC2+SCE+5
XWD FCE+SAC2+4,SAC2+7
XWD FCE+SACINH+SCE+0,FCE+SAC2+SCE+3
XWD FAC2+FCE+SAC2+4,FAC2+SAC2+7
XWD FAC2+FCE+SACINH+SCE+6,FAC2+FCE+SAC2+SCE+5
IF240: XWD 1,1 ;SHIFTING
XWD 1,7
XWD FAC2+SAC2+7,FAC2+SAC2+7
XWD FAC2+SAC2+7,0
XWD FCEPSE+SARBR+3,PCINH+FCCLT+1
XWD 1,1
XWD SACINH+FACINH,FACINH+SACINH+10
XWD SACINH+FACINH+PCINH+20,0
IF260: XWD SARBR+12,FCE+SARBR+12 ;PUSH,POP,ETC
XWD FCCRT+SARBR+13,FCCRT+13
XWD FACINH+SACINH+SCE+0,FACINH+1
XWD SARBR+3,FCCLT+3
XWD FCE+2,1
XWD FCEPSE+SACINH+0,FCEPSE+3
XWD FCE+2,1
XWD FCEPSE+SACINH+0,FCEPSE+3
IF300: REPEAT 4,<XWD SACINH+10,SACINH+10> ;CAI,CAM
REPEAT 4,<XWD SACINH+FCE+11,SACINH+FCE+11>
REPEAT 4,<XWD SACINH+10,SACINH+10>
REPEAT 4,<XWD FCE+SACZ+2+FACINH,FCE+SACZ+2+FACINH>
REPEAT 4,<XWD 1,1> ;CODE 340 AOJ
REPEAT 4,<XWD FCEPSE+SACZ+3+FACINH,FCEPSE+SACZ+3+FACINH>
REPEAT 4,<XWD 1,1>
REPEAT 4,<XWD FCEPSE+SACZ+3+FACINH,FCEPSE+SACZ+3+FACINH>
IF400: XWD FACINH+2,FACINH+1 ;BOOLE 0
XWD FACINH+SACINH+SCE,FACINH+SCE+3
XWD FCE+2,1 ;BOOLE1
XWD FCEPSE+SACINH+0,FCEPSE+3
XWD FCE+2,1 ;BOOLE 2
XWD FCEPSE+SACINH+0,FCEPSE+3
XWD FACINH+FCE+2,FACINH+1 ;BOOLE 3
XWD SACINH+FACINH+FCEPSE,FACINH+FCEPSE+3
IF420: XWD FCE+2,1 ;BOOLE 4
XWD FCEPSE+SACINH+0,FCEPSE+3
XWD 2,1 ;BOOLE 5
XWD SACINH+SCE,SCE+3
XWD FCE+2,1 ;BOOLE 6
XWD FCEPSE+SACINH,FCEPSE+3
XWD FCE+2,1 ;BOOLE 7
XWD FCEPSE+SACINH+0,FCEPSE+3
IF440: XWD FCE+2,1 ;BOOLE 10
XWD FCEPSE+SACINH+0,FCEPSE+3
XWD FCE+2,1 ;BOOLE 11
XWD FCEPSE+SACINH+0,FCEPSE+3
XWD 1,1
XWD SACINH+SCE,SCE+3
XWD FCE+2,1 ;BOOLE 13
XWD FCEPSE+SACINH+0,FCEPSE+3
IF460: XWD FACINH+FCE+2,FACINH+1 ;BOOLE 14
XWD SACINH+FACINH+FCEPSE,FACINH+FCEPSE+3
XWD FCE+2,1 ;BOOLE 15
XWD FCEPSE+SACINH,FCEPSE+3
XWD FCE+2,1 ;BOOLE 16
XWD FCEPSE+SACINH,FCEPSE+3
XWD FACINH+2,FACINH+1 ;BOOLE 17
XWD FACINH+SACINH+SCE,FACINH+3+SCE
IR500: REPEAT 2,<XWD FCE+2,1 ;HALF WORDS
XWD FCEPSE+SACINH,FCEPSE+FACINH+SACZ>
REPEAT 6,<XWD FCE+FACINH+2,FACINH+1
XWD FCEPSE+SACINH,FCEPSE+FACINH+SACZ>
REPEAT 2,<XWD FCE+2,1
XWD FCEPSE+SACINH,FCEPSE+FACINH+SACZ>
REPEAT 6,<XWD FCE+FACINH+2,FACINH+1
XWD FCEPSE+SACINH,FCEPSE+FACINH+SACZ>
IR600: REPEAT 4,<XWD SACINH+1,SACINH+1> ;TEST INST
REPEAT 4,<XWD FCE+SACINH+2,FCE+SACINH+2>
REPEAT 4,<XWD 1,1>
REPEAT 4,<XWD FCE+2,FCE+2>
REPEAT 4,<XWD 1,1>
REPEAT 4,<XWD FCE+2,FCE+2>
REPEAT 4,<XWD 1,1>
REPEAT 4,<XWD FCE+2,FCE+2>
PAGE
REPEAT 40,<XWD 20,20>
;SHIFT ROTATE
SHROT: MOVE 0,IRA
CAIN 0,243 ;IR JFFO ?
JRST JFFO1 ;YES
HRR SC, BR
TRZ SC, 777400 ;BR 18, 29-35
TRNE BR, 400000 ;GO TO SHIFT
TRO SC, 777400 ;COUNTER
STORE ET0
HRRZI -1 ;FOR RIGHT SHIFTS
TRNE BR, 400000
JRST SHROT1
MOVN SCAD,SC ;SC NEGAT SETUP
HRR SC,SCAD ;SC FM SCAD(J)
STORE SRT1
MOVEI 1
SHROT1: MOVE AD,IRA
GO SCSUB
GO SHROT2
JRST ST0
SHTAB: ASH AR,@(P)
ROT AR,@(P)
LSH AR,@(P)
CAI
ASHC AR,@(P)
ROTC AR,@(P)
LSHC AR,@(P)
CAI
SHROT2: PUT 0 ;C(AC0)=DIRECTION OF SHIFT
CAIE AD,244 ;IR ASHC?
CAIN AD,240 ;OR ASH?
JRST SHROT3 ;YES.
SHRT2: XCT SHTAB-240(AD)
GET 0
RTN
SHROT3: TRNE BR,400000 ;BR18(0)?
JRST SHRT2 ;NO.
MOVE 1,AR
LSH 1,1
XOR 1,AR
SKIPGE 1 ;BR18(0) AND AR0 NE AR1?
TLO PC,AROV ;YES. SET AROV FLAG.
JRST SHRT2
JFFO1: MOVE 0,AR ;SPECIAL FIX TO INCLUDE JFFO
JFFO 0,.+3
MOVE AR,1
JRST ST0
MOVE AR,1
HRR PC,MA
JRST ST0
;FLOATING POINT
SFSC: HRR SC,BR ;SC FM BR(1)
TRZ SC,777400
TRNE BR,400000
TRO SC,777400
MOVE BR,AR ;BR FM AR(J)
HLRZ 0,BR
LSH 0,-11
HRRM 0,SCAD
SKIPGE AR
SETCA SCAD, ;AR0(1) : SCAD SC-BR SETUP
ADD SCAD,SC ;AR0(0) : SCAD SC+BR SETUP
STORE ET0
TLZ AR,377000 ;AR1-8 FM AR0(J)
TLNE AR,400000
TLO AR,377000
STORE ET1
HRR SC,SCAD ;SC FM SCAD(J)
STORE ET2
GO NRT0
JRST ST0
SDFN: MOVN AD,BR ;AD MINUS BR
HLRZ SCAD,BR
LSH SCAD,-11 ;SCAD SC+BR SETUP
HRR SC,SCAD ;SC FM SCAD(J)
MOVE BR,AR ;BR FM AR(J)
MOVE AR,AD ;AR FM AD(J)
MOVN AD,BR ;AD MINUS BR
TLNN AR,777
TRNE AR,-1
SETCM AD,BR ;AD9-35 NE 0 : AD CRY36 CLR
STORE ET0
TLZ AR,777000
LSH SCAD,33
IORM SCAD,AR ;AR0-8 FM SCAD(J)
STORE ET1
MOVE BR,AR ;BR FM AR(J)
MOVE AR,AD ;AR FM AD(J)
STORE ET2
JRST ST0
SFSB: MOVNS BR ;AD MINUS BR
EXCH AR,BR ;AR FM AD(J), BR FM AR(J)
SFAD: STORE ET0
FAT1: MOVE AR
ASH -^D27
HRRM SC ;SC FM AR0-8(1)
MOVE SCAD,BR
ASH SCAD,-^D27
MOVE BR
XOR AR
SKIPL ;AR0 NE BR0?
SUBM SC,SCAD ;SCAD SC-BR SETUP
SKIPGE
ADD SCAD,SC ;SCAD SC+BR SETUP
HRRE SCAD,SCAD ;PUT BIT 18 INTO BIT 0.
STORE FAT1
FAT2: HRR SC,SCAD ;SC FM SCAD(J)
MOVE 0,AR
XOR 0,BR
JUMPGE 0,FAT2B ;AR0 = BR0.
JUMPGE SCAD,FAT2A ;SCAD0(0) + AR0 NE BR0.
HRRI SCAD,1(SC) ;SCAD0(1) +AR0 NE BR0..SCAD SC+1 SETUP
JRST FAT2D
FAT2A: SETCM SCAD,SC ;SCAD SC COM SETUP.
JRST FAT2D
FAT2B: SKIPL SCAD
MOVN SCAD,SC ;SC NEGATE SETUP.
FAT2D: STORE FAT2
FAT3: MOVE SC
LSH 0,33
XOR AR
HRR SC,SCAD ;SC FM SCAD(J)
STORE FAT3
JUMPL 0,FAT45 ;SC0 = AR0?
EXCH AR,BR ;YES. AR FM AD(J), BR FM AR(J)
FAT3A: STORE FAT3A
FAT45: HRRE SC ;SHIFT COUNT SIGN TO BIT ZERO
TRC SC, 700
TRCE SC, 700
JUMPL FAT4 ;SC 0-2 NOT = 7 AND SC0(1)
FAT5: TLZ AR,377000 ;SC0-2 = 7 OR SC0(0)
TLNE AR,400000 ;AR1-8 FM AR0 (J)
TLO AR, 377000
STORE FAT5
GO SCSUB ;CALL SHIFT COUNTER
GO FPSHRT ;FOR FLOAT SHIFT RIGHT
FAT6: MOVE 0,BR
LSH 0,-33
MOVE SCAD,SC
ADD SCAD,0 ;SCAD SC+BR SETUP
STORE FAT6
FAT7: HRR SC,SCAD ;SC FM SCAD(J)
TLZ BR,377000
TLNE BR,400000 ;BR1-8 FM BR0(J)
TLO BR, 377000
SETCM SCAD,SC ;SCAD SC COM SETUP
STORE FAT7
FAT8: ADD AR,BR ;AR FM AD(J)
JUMPGE BR,FAT8A
HRR SC,SCAD ;BR0(1) : SC FM SCAD(J)
FAT8A: STORE FAT8
GO NRT0 ;GO TO NORMALIZE RETURN
JRST ST0
FAT4: SETZ AR, ;CLR AR
TRZ SC,-1 ;SC CLR
STORE FAT4
JRST FAT6
;FLOATING DIVIDE
SFDV: MOVE 0,IRA
CAIN 0,171
JRST DIVT0 ;FDVL
SFDV1: JUMPGE AR,.+3 ;FDV
MOVNS AR ;AR0(1) : AD AR NEGATE..AR FM AD(J)
TLO MA,DSF7 ;DSF7 SET
SFMP: STORE ET0
JRST FPT0
FDT1: MOVE AD,AR ;AD AR+EN SET
SKIPL BR
SUB AD,BR ;BR0(0) : AD BR-EN..AD CRY36 SET
SKIPGE BR
ADD AD,BR ;BR0(1) : AD BR+EN SET
TRNE SC,400 ;ECO49, SC0(0)
JRST .+4 ;NO
TRNE SC,200 ;SC1(0)
SETOM FXUHLD ;SC0 NE SC1, SET AR FXU HOLD
JRST .+3
TRNN SC,200 ;SC1(0)
JRST .-3
STORE FDT1
JUMPL AD,FDT4 ;AD0(1)?...GO TO FDT4
FDT2: MOVE AD,AR ;AR ENABLE BR DISABLE
TLZ FE,-1 ;FE CLR
STORE FDT2
FDT3: HRLM SCAD,FE ;FE FM SCAD(1)
GO FPSHRT ;AR SH RT...MQ SH RT
SETOM FDF3# ;FDF3 SET
STORE FDT3
FDT4: TRZ SC,-1 ;SC CLR
STORE FDT4
FDT5: HRRI SC,-^D28 ;IF IR6(1)
TLNN IR,4000 ;-28 TO SC, IF IR6(0)
HRRI SC,-^D27 ;-27 TO SC
STORE FDT5
FDT5A: GO DST1 ;GO TO DIVIDE STEP SUBROUTINE
JRST SS9 ;ERROR RETURN.
FDT6: TLNN IR,4000 ;IR6(1)?
JRST .+3 ;NO.
ADDI AR,1
ASH AR,-1 ;YES..AR SHRT
TLO MA,NRF1 ;DISABLE FURTHER ROUNDING
HLR SC,FE ;SC FM FE(1)
STORE FDT6
SETOM FDT7FX# ;FDVL SIM FIX FOR NR ALL ZERO
GO NRT0 ;TO NORM. ROUTINE
SKIPN FDT7FX
JRST ST0 ;NR ALL ZERO
FDT7: MOVN AD,AR ;AD AR-EN...AD CRY36 SET
STORE FDT7
FDT8: TLNE MA,DSF7 ;BR0 NE DSF7?
JUMPL BR,FDT8A
TLNN MA, DSF7
JUMPGE BR,FDT8A
MOVE AR,AD ;YES...AR FM AD(J)
FDT8A: STORE FDT8
MOVE 0,IRA
CAIE 171 ;FDVL?
JRST ST0 ;NO. FDV
;MORE FLOATING DIVIDE.....FDVL
FDT9: MOVE BR,AR ;BR FM AR(J)
SETZ AR, ;AR CLEAR
TRZ SC,-1 ;SC CLEAR
STORE FDT9
FMRQA 0
TLNN MA,FMEN ;MC FMEN?
JRST FDRQ ;NO.
STORE FDT10
JRST FDT11
FDRQ: STORE FDRQ
FDT11: HLRZ AR
ASH -^D9
HRRM SC ;SC FM AR0-8[1]
SKIPE FDF3 ;FDF3 SET?
JRST FDT11B ;YES. 32 EN SET
HRRZI SCAD,-33(SC) ;NO. 33 EN SET
SKIPGE AR
HRRZI SCAD, 33(SC)
FDT11A: MOVE AR,MQ ;AR FM MQ(J)
STORE FDT11
JRST FDT12
FDT11B: HRRZI SCAD,-32(SC)
SKIPGE AR
HRRZI SCAD,32(SC)
JRST FDT11A
FDT12: TRNN SCAD,400 ;AR0=SCAD0 AND AD NE 0 :
JUMPGE AR,FDT12A ;AR1-8 FM SCAD(J)
TRNE SCAD,400
JUMPL AR,FDT12A
SETZ AR, ;AR0 NE SCAD0 : AR CLR
FDT12A: JUMPE AR,FDT12B
HRLZ SCAD
LSH ^D9
TLZ 0,400000
TLZ AR,377000
IORM AR ;AR1-8 FM SCAD(J)
FDT12B: STORE FDT12
FDT13: MOVEM AR,MQ ;MQ FM AD(J) ;REMAINDER
STORE FDT13
FDT14: MOVE AR,BR ;AR FM AD(J) ;QUOTIENT
STORE FDT14
JRST ST0 ;END FLOATING DIVIDE
;FLOATING EXPONENT
FPT0: MOVE SCAD,AR
ASH SCAD,-33
HRRM SCAD,SC ;SC FM AR0-8(1),SCAD FM SC(J)
SKIPGE AR
SETCM SCAD,SC ;AR0(1) : SCAD SC COM SETUP
STORE FPT0
FPT1: HRR SC,SCAD ;SC FM SCAD(J)
MOVE 1,BR
ASH 1,-^D27
MOVE 0,IR
LSH 0,5
XOR 0,BR
SKIPGE 0 ;IR5 = BR0 : SCAD DATA 1 EN
SETCA 1, ;IR5 NE BR0 : SCAD DATA 0 EN
ADD SCAD,1
TLNE IR,10000 ;IR5(1)?
ADDI SCAD,1 ;YES. SCAD + 1 EN SET
STORE FPT1
FPT2: HRR SC,SCAD ;SC FM SCAD(J)
TLNN IR,10000
SUBI SCAD,200 ;IR5(0) : SC-EN (SCAD 200 EN SET)
TLNE IR,10000
ADDI SCAD,200 ;IR5(1) : SC+EN (SCAD 200 EN SET)
STORE FPT2
FPT3: TLZ BR,377000 ;BR1-8 FM BR0(J)
TLNE BR,400000
TLO BR,377000
TLZ AR,377000 ;AR1-8 FM AR0(J)
TLNE AR,400000
TLO AR,377000
HRLZ FE,SCAD ;FE FM SCAD(1),SC CLR
TLNE IR,10000 ;IR5(1)?
HRR SC,SCAD ;YES. SC FM SCAD(J)
ADDI SCAD,1 ;SCAD SC+1 SETUP
STORE FPT3
TLNE IR,10000 ;IR5(1)?
JRST FDT1 ;YES.
FMT1: HRRI SC,745 ;SC FP SETUP (745)
STORE FMT1
MST0: JUMPGE BR,.+3
SKIPG AR
TLO MA,MPF2 ;AR0(1) AND BR0(1) : MPF2 SET.
MOVE MQ,BR ;MQ FM AD(J)
MOVE BR,AR ;BR FM AR(J)
STORE MST0
MST1: SETZB AR,AD ;AR CLR
TRNE MQ,1 ;MQ35(1)?
SUB AD,BR ;YES. AD BR-EN, AD CRY36 SET
TRNE MQ,1 ;MQ35(1)?
SETOM ADBREN# ;YES. SET AD BR + V - EN FLAG
STORE MST1
GO SCSUB ;GO TO SC SUBROUTINE
GO MULSH ;XCT THIS AT SCT3
SKIPE MPF1# ;MPF1 SET?
JRST MPT2 ;YES. GO BACK TO MUL ROUTINE
FMT3: MOVE AR,AD ;AR FM AD(J)
HLR SC,FE ;SC FM FE(J)
TRZ MQ,1 ;MQ 35 CLR
STORE FMT3
GO NRT0 ;GO TO NORMALIZE ROUTINE.
JRST ST0
;NORMALIZE
NRT0: HRRI SCAD,1(SC) ;SCAD SC+1 SETUP
STORE NRT0
NRT0A: JUMPN AR,NRT10 ;AD NE 0 : NOT NR ALL ZERO COND.
MOVE 0,IRA
CAIE 0,171 ;GO TO NRT99 IF AD=0 + IR = FDVL.
TDNN MQ,[XWD 1777,-1] ;NR ALL ZERO CONDITION =
;AD=0 AND MQ8(0) AND MQ9-35 = 0.
JRST NRT99-1 ;GO TO NRT99.
NRT10: TLNE AR,1000
JUMPGE AR,NRT10A ;AR0 NE AR8..NR SH RT COND
TLNN AR,1000
JUMPL AR,NRT10A ;AR0 NE AR8..NR SH RT COND
TLNN AR,1000
JRST NRT1 ;AR8(0)...NOT NR SH RT COND
TLNN AR,777
TRNE AR,-1
JRST NRT1 ;AD9-35 NE 0...NOT NR SH RT COND
NRT10A: HRR SC,SCAD ;SC FM SCAD(J)
MOVE 0,IRA# ;MOVE THE INST CODE INTO AC0.
CAIL 0,170 ;IR FDVX?
ASH AR,-1 ;FDV DISABLE MQ
CAIGE 0,170 ;NOT FDVX?
GO FPSHRT ;SHIFT RIGHT
STORE NRT10
NRT1: TLNE MA,NRF1 ;ECO49, NRF1(0)
JRST .+10 ;NO
TRNE SC,400 ;SC0(0)
JRST .+4 ;NO
TRNE SC,200 ;SC1(0)
SETOM FXUHLD ;NRF1(0) + (SC0 NE SC1) : SET AR FXU HOLD
JRST .+3
TRNN SC,200 ;SC1(0)
JRST .-3
SETCM SCAD,SC ;SCAD SC COM SETUP
STORE NRT1
NRTNOR: TLNE AR,400
JUMPGE AR,NRT3 ;AR SIGN NOT = AR BIT 9
TLNN AR,400
JUMPL AR,NRT3 ;AR SIGN NOT = AR BIT 9
MOVE 0,IRA
CAIN 0,130
JRST NRT3 ;IR UFA
MOVSI 777000
ANDCA AR
CAME [XWD 400,0]
JRST NRT2 ;AD9(1) + AD10-35 NE 0
TLNN MQ,1000 ;ECO49, AD9(1) + AD10-35 = 0 + MQ08(0)
JRST NRT3 ;YES
NRT2: HRR SC,SCAD ;SC FM SCAD(J)
HRRI SCAD,1(SC) ;SCAD SC+1 SETUP
MOVE 0,IRA# ;MOVE INST CODE INTO AC0.
CAIL 0,170 ;FDVX?
ASH AR,1 ;IR FDVX : NO MQ SH LT
CAIGE 0,170 ;NOT FDVX?
GO FPSHLT ;FLOATING SHIFT LEFT
STORE NRT2
JRST NRTNOR ;LOOK FOR NR NORMAL
NRT3: HRR SC,SCAD ;SC FM SCAD(J)
SETCM SCAD,SC ;SCAD SC COMP SETUP
STORE NRT3
JRST SHORT ;LOOK FOR NR ROUND COND.
NRT4: TRNN SC,400
TLO PC,AROV+FOV ;SC0(0) : AROV AND FOV SET
TRNE SC,400 ;ECO49, SC0(0)
JRST .+3 ;NO
SKIPN FXUHLD ;SC0(0) + AR FXU HOLD(0)
TLO PC,FXU ;YES. SET ARFXU.
HRR SC,SCAD
SKIPGE AR
TRC SCAD,-1
STORE NRT4
NRT5: HRLZ SCAD
LSH ^D9
TLZ 0,400000
TLZ AR,377000
IORM AR ;AR1-8 FM SCAD1-8(J)
STORE NRT5
TLNN IR,6000
TLNN IR,1000
JRST NRT99 ;NOT LONG
TLC IR,70000
TLCN IR,70000
JRST NRT98 ;FDV AND LONG
NLT0: HRREI SCAD, -33(SC) ;-33 ENABLE
STORE NLT0
NLT1: HRR SC,SCAD ;SC FM SCAD(J)
EXCH AR,MQ ;MQ FM AD(J), AR FM MQ(J)
TRNE SC,400 ;SCAD0(1) : AR CLR
SETZ AR,
STORE NLT1
NLT2: LSH AR,-1 ;AR SH RT ; AR0 CLR
STORE NLT2
NLT3: JUMPE AR,NLT3A
HRLZ SC
LSH ^D9
TLZ 0,400000
TLZ AR,377000
IORM AR ;AD9-35 NE 0 : AR1-8 FM SCAD1-8 (J)
NLT3A: STORE NLT3
NLT4: EXCH AR,MQ ;AR FM MQ(J)...MQ FM AD(J)
STORE NLT4
JRST NRT99
SHORT: TLNN MA, NRF1
TLNN IR,4000
JRST NRT4 ;NRF1(1) OR IR6(0),
TLNN MQ,1000
JRST NRT4 ;OR MQ8(0),
TDNN MQ,[XWD 777,-1]
JUMPL AR,NRT4 ;OR MQ9-35 = 0 AND AR0(1)..DON'T ROUND
NRT6: TLO MA,NRF1 ;NRF1 SET
HRR SC,SCAD ;SC FM SCAD(J)
STORE NRT6
NRT7: ADDI AR,1 ;AR FM AD(J)..(AD CRY36 SET)
SETZ MQ, ;ECO49, MQ CLEAR
STORE NRT7
JRST NRT0
SETZM FDT7FX ;GOT HERE FROM FDVL NR ALL ZERO
NRT99: STORE NRT99
NRT98: RTN ;ROUTINE
;FLOATING POINT SHIFT RIGHT, SHIFT LEFT
FPSHRT: ASHC AR,-1 ;AR MQ SH RT
TLZ MQ,401000
TLZE MQ,200000 ;AR35 TO
TLO MQ,1000 ;MQ BIT 8
RTN
FPSHLT: TLZ MQ,200000
TLZE MQ,1000
TLO MQ,200000 ;MQ BIT 8 TO AR 35
ASHC AR,1
TDZ MQ,[XWD 400000,1]
RTN
;FIXED POINT MULTIPLY
SMUL: HRRI SC,777735 ;SC MD SETUP (735)
SETOM MPF1# ;MPF1 SET
STORE ET0
JRST MST0
MPT2: MOVE AR,AD ;AR FM AD(J)
LSH MQ,-1 ;MQ SH RT
TLNE AD,400000 ;AND PUT AD SIGN
TLO MQ,400000 ;TO MQ SIGN
JUMPGE AD,.+3
TLNE MA,MPF2 ;IF AD0(1) AND MPF2(1)
TLO PC,AROV ;SET OVERFLOW
SETZM MPF1# ;MPF1 CLR
STORE MPT2
TLNE IR,4000 ;IR6(1)?
JRST ST0 ;YES..MULX
MPT3: SKIPGE AD,AR ;IMUL
SETCA AD, ;AD CRY INS
STORE MPT3
SKIPE AD ;AD NE 0?
TLO PC,AROV ;YES. SET AROV
MOVE AR,MQ ;AR FM MQ(J)
STORE MPT4
JRST ST0 ;TO STORE CYCLE
;MULTIPLY SHIFT ADD/SUB SUBROUTINE
MULSH: MOVEM MQ,TEMP2# ;SAVE MQ
MOVE AR,AD
MOVE 0,IRA
CAIGE 0,220 ;IR FMP?
JRST MULSHA ;YES.
LSHC AR,-1 ;AR SH RT, MQ SH RT
TLNE AR,200000 ;ARB1(1)?
TLO AR,400000 ;YES. SET SIGN BIT.
MOVE AD,AR
MULAS: MOVE 0,TEMP2# ;MQ 34 35
TRNE 0,1 ; 0 0 = NOTHING
JRST MULAS1 ; 0 1 = ADD
TRNE 0,2 ; 1 0 = SUB
SUB AD,BR ; 1 1 = NOTHING
TRNE 0,2
SETOM ADBREN#
RTN
MULAS1: TRNN 0,2
ADD AD,BR
TRNN 0,2
SETOM ADBREN#
RTN
MULSHA: GO FPSHRT
JRST MULAS-1
;FIXED POINT DIVIDE (DIVX)
XSDIV: HRRI SC,-43 ;SC MD SETUP (735)
STORE ET0
DIVT0: SETCM AD,AR ;AD AR-EN SET
JUMPGE AR,DIVT0A ;AR0(0) : DO NOTHING
TLO MA,DSF7 ;AR0(1) : DSF7 SET
MOVE AR,MQ ;AR FM MQ(J)
MOVE MQ,AD ;MQ FM AD(J)
DIVT0A: STORE DIVT0
TLNN MA,DSF7 ;DSF7(1)?
JRST DIVT4 ;NO. GO TO DIVT4
DIVT1: MOVN AR,AR ;YES. AD AR-EN SET,AD CRY36 SET.
EXCH AR,MQ ;AR FM MQ(J), MQ FM AD(J)
STORE DIVT1
TLNN IR,200000 ;DIV LOW ZERO COND =
JRST DIVT2B ;IR1(0) + AD 8-35 = 0
TDNE MQ,[377777,,-1] ;OR IR1(1) + AD CRY1
JRST DIVT3
DIVT2A: MOVE AD,AR ;AD AR+EN
ADDI AD,1 ;AD CRY36 SET
DIVT3: MOVE AR,AD ;AR FM AD(J)
STORE DIVT3
DIVT4: LSH MQ,1 ;MQ SHIFT LEFT
STORE DIVT4
TLNE IR,40000 ;FDVL?
JRST FPT0 ;YES.
GO DST1 ;GO TO DIV SUBROUTINE
JRST SS9 ;ERROR RETURN
JRST ST0
DIVT2B: TDNE MQ,[XWD 1777, -1]
JRST DIVT3
JRST DIVT2A
;IDIVIDE DIV
SDIV: TLNE IR,4000
JRST XSDIV
XSIDIV: MOVN AD,AR ;ADDER NEGATE OF AR
HRRI SC,-43 ;SC MD SETUP (735)
JUMPGE AR, .+3
MOVE AR,AD ;AR0(1) : AR FM AD(J)
TLO MA,DSF7 ;DSF7 SET
MOVE AD,AR ;AD AR+EN SET..OTHERS CLR
STORE ET0
SIDIV1: MOVE MQ,AD ;MQ FM AD(J)
SETZ AR, ;AR CLR
STORE ET1
SIDIV2: ROTC AR,1 ;ECO45, SHIFT AR AND MQ LEFT
TRC MQ,1 ;AR(35)_MQ(0)
STORE ET2
GO DST1
JRST SS9
JRST ST0
DST1: MOVE AD,AR ;AD AR+EN SET
SKIPGE BR
ADD AD,BR ;BR0(1): AD BR+EN
SKIPL BR
SUB AD,BR ;BR0(0): AD BR-EN
STORE DST1
TLNN AD,400000 ;AD0(1)?
JRST DST7 ;NO..AN OVERFLOW
DST2: SETOM ADBREN ;SET ADBR+ OR - EN FLAG.
STORE DST2
GO SCSUB ;GO TO SC SUBROUTINE
GO DIVLOC
DST3: MOVE AR,AD ;AR FM AD(J)
LSH MQ,1 ;MQ SHLT
TLNN AD,400000 ;ADDER NOT BIT ZERO
TRO MQ,1 ;TO MQ35
STORE DST3
DST4: GO FSTDIV
MOVE AD,0
TRNN MQ,1 ;MQ35(0)?
MOVE AR,AD ;YES..AR FM AD(J)
MOVE AD,AR ;AD AR+EN
TLNE MA,DSF7 ;DSF7(1)?
MOVN AD,AD ;YES..NEGATE ADDER
STORE DST4
DST5: MOVE AR,MQ ;AR FM MQ(J) ;QUOTIENT
MOVE MQ,AD ;MQ FM AD(J) ;REMAINDER
MOVE AD,AR ;AD AR+EN
TLNE IR,200000 ;IR1(1)?
MOVN AD,AR ;YES..AD AR-EN AND AD CRY36 SET
TLNN IR,200000 ;IR1(0)?
ADDI AD,1 ;YES.. AD AR+EN AND AD CRY36 SET
STORE DST5
TLNN IR,200000 ;IR1(0)?
JRST DIVEN ;YES..FLOATING DIVIDE
DIVT5: TLNN MA,DSF7 ;DSF7 NE BR0?
JUMPGE BR, DIVT51
TLNE MA,DSF7
JUMPL BR,DIVT51
MOVE AR,AD ;YES..AR FM AD(J)
DIVT51: STORE DIVT5
DIVEN: AOS (P) ;TO STORE TIME
RTN ;RETURN +2
DST7: TLNN IR,200000 ;FDV?
TLO PC,FOV ;YES..SET AR FOV
TLO PC,AROV+DCK ;AROV SET, AR DCK SET
STORE DST7
RTN ;GO TO END OF STORE CYCLE.
;THE DIVIDE STEP FOR DIVIDE SUBROUTINE
DIVLOC: SETOM ADBREN#
MOVE AR,AD
MOVE IRA
CAIL 220 ;IR FDV?
JRST DVLOCA ;NO.
TLZ MQ,400000 ;YES.
TLZE MQ,1000
TLO MQ,400000
DVLOCA: ROTC AR,1
TRC MQ,1
GO FSTDIV
MOVE AD,0
RTN
FSTDIV: MOVE 0,AR
TLNN AD,400000
JUMPL BR,.+5 ;XOR=0
TLNE AD,400000
JUMPGE BR,.+3 ;XOR=0
SUB 0,BR ;XOR=1...SUBTRACT
RTN
ADD 0,BR ;XOR=0...ADD
RTN
;SHIFT COUNTER
SCSUB: STORE SCT0
SCSCTX: TRNN SC,400
JRST SCT4 ;TIME 4 RETURN
HRRI SC,1(SC)
SKIPE ADBREN#
JRST SCT2
SCT3: XCT @(P)
SKIPE NOSCT# ;DON'T PRINT SCT3 FLAG SET?
JRST SCSCTX ;YES.
SCT3A: STORE SCT3
JRST SCSCTX
SCT4: STORE SCT4
AOS (P) ;INC RETURN
RTN ;EXIT
SCT2: SETZM ADBREN
SKIPE NOSCT# ;DON'T PRINT SCT2 FLAG SET?
JRST SCT3 ;YES.
STORE SCT2
JRST SCT3
;BLOCK TRANSFER INST, CODE 251
BLTS: ROT AR,^D18 ;SWAP AR HALVES
STORE ET0
HRR MA,AR ;AR RT TO MA
STORE ET1
ADD AR,[1000001] ;AD AR+EN SET, AD+1 BOTH
EXCH AR,MQ ;AR FM MQ(J), MQ FM AD(J)
MCWR ;MEMORY WRITE
STORM ET2
SBLT1: TLZ AR,-1 ;AR LT CLR
HRR AR,MQ ;AR RT FM MQ(J)
SETCM AD,BR ;AD BR-EN SET
ADD AD,AR ;AD CRY36 CLR..(AD AR+EN SET)
STORE BLTT1
TLNE AD,1 ;AD17(0)?
JRST BLTT3 ;NO. GO TO BLTT3
HRRI PC,1(PC) ;YES. PC+1
STORE BLTT2
JRST SS9
BLTT3: MOVE AR,MQ ;AR FM MQ(J)
SETZ MQ, ;MQ CLR
STORE BLTT3
MOVEI 2,PCINH+FCCLT+1
JRST FT6
;TIME PRINTER
;THIS ROUTINE PRINTS THE CONTENTS OF THE SEVERAL MACHINE
;REGISTERS AT VARIOUS TIMES IN THE INSTRUCTION CYCLE
PRINTA: PUT 0 ;SAVE AC0.
SWITCH ;GO READ THE DATA SWITCHES.
SETZM NOSCT# ;CLR NO PNT SCT2 + 3 FLAG.
TRNE 0,INHSCT ;DON'T PNT SCT2 + 3 BIT SET?
SETOM NOSCT ;YES. SET FLAG.
MOVE 0,1
PNTA
MOVEI 0,TAB
PNTA
MOVE 0,PC
GO XPNT6
MOVE 0,MA
GO XPNT6
HRR 0,SC
GO XPNT3
HLR 0,FE
GO XPNT3
MOVE 0,AR
GO XPNTOC
MOVE 0,MQ
GO XPNTOC
MOVE 0,BR
GO XPNTOC
GO PCR
GET 0 ;RESTORE AC0.
RTN
XPNT6: TRNN 0,77
JRST OPNT6
PNT6
RTN
OPNT6: MOVEI [ASCIZ/0 /]
PNTAL
RTN
XPNT3: TRNN 0,7
JRST OPNT3
PNT3
RTN
OPNT3: MOVEI [ASCIZ/0 /]
PNTAL
RTN
XPNTOC: SKIPN 0
JRST OPNTOC
PNTOCT
RTN
OPNTOC: MOVEI [ASCIZ/0 /]
PNTAL
RTN
;PRINT THE INSTRUCTION, INITIAL AND FINAL RESULTS
HEADER: SETZM HDCNTL
SAVE15 ;SAVE FIRST 15 ACS
GO PCR
HEADP1: GO PCR
SKIPN PNTSIM
JRST .+4
MOVE LINCNT
CAILE ^D46 ;ROOM ON PAGE FOR INIT/FINAL
GO PCR1 ;NO, START A NEW PAGE
MOVEI 0,AST
HEADP2: PNTA ;PRINT *
SETOM PNTSPC
MOVE 0,(P)
HEADP3: PNT6 ;PRINT PC
GO PNTINS ;GO PRINT INSTRUCTION.
MOVEI 0,TAB
PNTA ;PRINT A TAB
HPAC: HRR MA,(P)
ADD MA,USERAC
JUMPN USERAC,.+3
TRNN MA,777700
ADDI MA,JA
PUT MA
ANDI MA,-1
MOVE 0,@MA
GET MA
SKIPE CONNF
JRST HPIOC ;PRINT I/O DEVICE CODE
ROT 0,-^D23
ANDI 0,17
PNTOCS ;PRINT AC
MOVEI 0,COMMA
PNTA ;PRINT A COMMA
HDEF: PUT MA
ANDI MA,-1
MOVE 1,@MA
GET MA
TLNE 1,20 ;INDIRECT BIT ON?
GO PNTIND ;YES. GO PRINT AN AT SIGN
PUT MA
ANDI MA,-1
MOVE 0,@MA
GET MA
PUT PNTSPC
SETZM PNTSPC
PNT6 ;PRINT E
GET PNTSPC
HIDX: PUT MA
ANDI MA,-1
MOVE 1,@MA ;LOOK FOR INDEXING
GET MA
TLNN 1, 17
JRST HAC
MOVEI 0,LFP
PNTA
MOVE 0,1
LSH 0,-^D18
ANDI 0,17
PNTOCS
MOVEI 0,RTP
PNTA
JRST HAC
HPIOC: ROT 0,-^D24 ;PRINT I/O DEVICE CODE
ANDI 0,774
PNTOCS
JRST HDEF-2
PNTIND: MOVEI 0,ATSIN
PNTA ;PRINT AN AT SIGN
RTN
HAC: SKIPE HDCNTL
JRST HEND
IFSWIT
ANDI 2,37
CAIN 2,20
JRST HTIME ;DON'T PRINT IF 20
MOVEI 0,[ASCIZ/
INITIAL
C(AC)=/]
PNTAL
AOS LINCNT
AOS LINCNT
MOVE 0,-1(P)
MOVE 0,@0
PNTHW
IFSWIT
HAC2: TRNE 2,FACINH
SETOM PFCE#
MOVEM 1,PINST#
ANDI 2,17 ;MASK SWITCHES
MOVE 0,-2(P)
MOVE 0,@0
CAIGE 2, 10
CAIGE 2,4
JRST CROCK1
PUT 0
MOVEI [ASCIZ/ C(AC+1)=/]
PNTAL
POP P,0
PNTHW
HPCE: CAIE 2, 1 ;PRINT THE CONTENTS
CAIN 2,7 ;OF THE EFFECTIVE ADDRESS
JRST HEIP ;DO NOT PRINT ON 1, 7 OR 10
CAIN 2, 10
JRST HEIP
MOVE 0,-3(P)
SKIPN PFCE#
JRST HPCE1
HRRZ 1,PINST
ADD 1,USERAC
JUMPN USERAC,.+3
TRNN 1,777700
ADDI 1,JA
PUT 1
ANDI 1,-1
MOVE 0,@1
GET 1
HPCE1: PUT 0
MOVEI [ASCIZ/
C(E)=/]
PNTAL
AOS LINCNT
POP P,0
PNTHW ;PRINT C(E)
SKIPE P15#
JRST CROCK7
HEIP: MOVEI 0,[ASCIZ/
FINAL
/]
PNTAL ;END OF FIRST LINE.
AOS LINCNT
AOS LINCNT
SKIPN PDLOVW
JRST HRESLT
MOVEI 0,PDLOVF
PNTAL
SETZM PDLOVW
HRESLT: MOVE 0,CAC ;GET C(AC).
CAIN 2,6
JRST CROCK3
JUMPE 2, .+3
CAIE 2, 10
CAIN 2, 11
JRST CROCK3
PUT 0
MOVEI [ASCIZ/C(AC)=/]
PNTAL
POP P,0
PNTHW ;PRINT AC.
HRAC2: CAIE 2,4
CAIN 2, 5
JRST .+3
CAIE 2, 7
JRST CROCK2
MOVEI [ASCIZ/ C(AC+1)=/]
PNTAL
MOVE 0,CAC1
PNTHW
HRPCE: JUMPE 2,HRPCE1 ;PRINT THE C(E)
CAIE 2, 3 ;RESULTS
CAIN 2, 5
JRST HRPCE1
CAIN 2,6
JRST HRPCE1
CAIGE 2, 12
JRST HTIME ;DO NOT PRINT C(E)
HRPCE1: CAIN 2,16
MOVE 0,PONTR#
CAIN 2,16
JRST HRPCE2
MOVE 0,CE
SKIPN PFCE#
JRST HRPCE2
HRRZ 1,PINST
ADD 1,USERAC
JUMPN USERAC,.+3
TRNN 1,777700
ADDI 1,JA
PUT 1
ANDI 1,-1
MOVE 0,@1
GET 1
HRPCE2: PUT 0
MOVEI [ASCIZ/
C(E)=/]
PNTAL
AOS LINCNT
POP P,0
PNTHW
SKIPE P15#
JRST CROC11 ;END OF SECOND LINE.
HTIME: SETZM PFCE#
MOVE CONSW
TRNE INHMT
JRST HEND
TLNE MA,MS+MT
GO TIMPNT ;PRINT TIME, AR, MQ, AND ETC.
HEND: RST15 ;END OF HEADER
RTN ;PRINTOUT
P15: 0
TIMPNT: GO PCR
GO PCR
MOVEI 0,TIMMES
PNTAL
GO PCR
RTN
TIMMES: ASCIZ .TIME PC MA SC FE AR MQ BR.
CROCK1: CAIE 2,1
CAIN 2,7
JRST HEIP
CAIN 2,10
JRST HEIP
CAIL 2,12
JRST CROCK4
JRST HPCE
CROCK2: CAIN 2,6
JRST SPCS13
JUMPE 2,SPCS13
CAIE 2,3
CAIN 2,5
JRST SPCS13
CAIGE 2,12
JRST HTIME
CAIG 2,14
JRST CROC10
JRST HRPCE1
SPCS13: JRST HRPCE1
CROCK3: JRST HRAC2
CROCK4: CAILE 2,14
JRST CROCK5
MOVE 1,-1(P)
GO CROC4
JRST HEIP
CROC4: CAIE 2,14
HRRZ 1,1
CAIN 2,14
HLRZ 1,1
CROCK6: CAIN 2,12
ADDI 1,1
CAMLE 1,VMEM
RTN
ADD 1,USERAC
JUMPN USERAC,.+3
TRNN 1,777700
ADDI 1,JA
PUT 1
ANDI 1,-1
MOVE 0,@1
GET 1
PUT 0
MOVEI [ASCIZ/ C(C(ACR+1))=/]
CAIN 2,13
MOVEI [ASCIZ/ C(C(ACR)=/]
CAIN 2,14
MOVEI [ASCIZ/ C(C(ACL))=/]
PNTAL
POP P,0
PNTHW
RTN
CROCK5: SETOM P15#
JRST HPCE
CROCK7: HRRZ 1,@1
ADD 1,USERAC
JUMPN USERAC,.+3
TRNN 1,777700
ADDI 1,JA
MOVEI [ASCIZ/ C(C(E))=/]
PNTAL
PUT 1
ANDI 1,-1
MOVE 0,@1
GET 1
PNTHW
JRST HEIP
CROC10: MOVE 1,CAC
GO CROC4
JRST HTIME
CROC11: CAIE 2,16
JRST CROK11
MOVEI 1,@PONTR#
ADD 1,USERAC
JUMPN USERAC,.+3
TRNN 1,777700
ADDI 1,JA
MOVEI [ASCIZ/ C(C(E))=/]
PNTAL
PUT 1
ANDI 1,-1
MOVE 0,@1
GET 1
PNTHW
CROK11: SETZM P15#
JRST HTIME
IT0IN: SETZM HNGCNT# ;CLEAR HUNG COUNTER
MOVEM PC,PCSAVE#
GO IT0 ;SIMULATE INSTRUCTION
RTN
HUNGCK: AOS 1,HNGCNT ;INCREMENT TIME STATE COUNTER
CAIG 1,^D1000 ;HUNG IN SIMULATION ?
RTN ;NO, CONTINUE
MOVEI [ASCIZ/
**SIMULATOR ERROR**
INSTRUCTION HUNG UP/]
PNTALF
SETOM HDCNTL ;SET HEADER TO RETURN AFTER INST
MOVE 0,PCSAVE
GO HEADER+1 ;PRINT INST
MOVEI CRLF
PNTAF
HNGERR: JRST .+1
ERRHLT
JRST DDTSRT
INT: 0
SETZM PDLOVW ;CLEAR PUSHDOWN LIST OVERFLOW FLAG.
HRLZI MA,USERAC
SETZB USERAC,HDCNTL#
MOVE USERAC,RELOC
HRRZ PC,INPC ;SET PSEUDO PROGRAM COUNTER
JRST @INT ;RETURN.
RELOC: 0
;SIMULATE INITIAL AND FINAL
;RESULTS PRINTED
SIMIF: JSR INT
TLZ MA,MT+MS+SU
TLO MA,RUN+SU
SETZM PNTCTL#
HRRZ PC
CAMGE CNTLPC
JRST SIMIF1
CAMLE UPRPC
JRST SIMIF1
MOVE OFFSET(PC)
AND MASK
CAMN INSTR
SETOM PNTCTL ;PRINT THIS INSTRUCTION
SIMIF1: GO IT0IN ;GO TO SIMULATE INST
SKIPE PNTCTL
GO HEADER ;PRINT THE RESULTS
TLNE MA, RUN ;IF RUN ON A ONE
JRST SIMIF+1 ;GO TO NEXT INST
JRST DDTEX ;EXIT
;SIMULATE THE MACHINE TIMES
;FOR ONE INSTRUCTION
SMMT1: JSR INT
PUT PC ;SAVE PC ON PUSH LIST
GO IT0IN ;SIMULATE THE INST
TLO MA,MS+MT+SU
PUT 0
SWITCH
TRNE 0,INHMT
TLZ MA,MS+MT
POP P,0
GO HEADER ;PRINT INITIAL FINAL
GET PC ;PRINT MACHINE STATES
GO IT0IN ;FOR THE INST AT PC
RTN ;EXIT TO MONITOR
;SIMULATE THE MEMORY STOP TIMES
SIMMS: JSR INT
TLO MA,RUN+SU
TLZ MA,MT+MS+ERR
HRRZ PC
CAMGE CNTLPC
JRST SIMMS1
CAMLE UPRPC
JRST SIMMS1
MOVE OFFSET(PC)
AND MASK
CAMN INSTR
TLZ MA,SU
SIMMS1: PUT PC ;SAVE PC ON LIST
GO IT0IN
GET 0
TLON MA,SU
TLO MA,ERR
TLNN MA,RUN
JRST VMHALT
TLNE MA,ERR
SKIPA PC,0
JRST SIMMS+3
TLO MA,MS
GO HEADER ;PRINT INITIAL FINAL
TLNE MA,ERR
GO IT0IN
JRST SIMMS+1 ;GO TO NEXT INSTRUCTION
;SIMULATE THIS PROGRAM
SIMPRG: JSR INT
TLO MA,RUN+SU
TLZ MA,MT+MS+ERR
MOVE OFFSET(PC) ;IS THIS SPECIAL LEAVE SIMULATION INST ?
CAMN [776000,,SEXIT1]
JRST @0 ;YES, RETURN TO COMMAND MODE
HRRZ PC
CAMGE CNTLPC
JRST SIMPR1
CAMLE UPRPC
JRST SIMPR1
MOVE OFFSET(PC)
AND MASK
CAMN INSTR
TLZ MA,SU
SIMPR1: PUT PC ;SAVE THE PC
GO IT0IN ;SIMULATE
GET 0 ;OLD PC TO ZERO
TLON MA,SU
TLO MA,ERR
TLNN MA,RUN
JRST VMHALT ;VIRTUAL MACHINE HALT
TLNE MA,ERR
SKIPA PC,0 ;RUN = 0 OR ERROR
JRST SIMPRG+3
TLO MA,MT+MS
GO HEADER ;PRINT INITIAL FINAL.
SWITCH
TRNE INHMT ;INHIBIT MACHINE TIMES ?
TLZ MA,MS+MT ;YES
TLNE MA,ERR
GO IT0IN
TTALTM ;IF ALTMODE, GO TO DDT
JRST .+2
JRST DDTEX5 ;CONTINUE WITH "SIMCON$G"
SIMCON: JRST SIMPRG+1
SMNST1: JSR INT
TLZ MA,700000
TLO MA,RUN+SU ;SET RUN AND STORE USER FLAGS.
GO IT0IN ;SIMULATE THE INST.
RTN ;RETURN TO MAIN PROG.
INPC: 0,,30000
MASK: -1
INSTR: 0
CNTLPC: 0
UPRPC: 0,,-1
SWITCH: 0
ACS:
JA: BLOCK 200 ;JOB STORAGE AREA
;BYTE FIRST CYCLE
SBYTE: MOVE 0,IRA
CAIN 130 ;IR UFA?
JRST SFAD ;YES.
CAIN 131 ;IR DFN?
JRST SDFN ;YES.
TLNN IR,5000
JRST SFSC ;FLOAT SCALE
SKIPE BISF ;2ND PART OF BYTE ?
JRST SECOND ;SECOND CYCLE OF BYTE
TLNE PC,BIS ;PC BIS FLAG SET ?
JRST BYT6 ;YES, NO INCREMENT
TLC IR,5000
TLCE IR,5000
JRST INCBYT ;INCREMENT BYTE
BYT6: STORE ET0
HLRZ SCAD,AR
ROT SCAD,-6
ANDI SCAD,77
TRC SCAD,-1 ;SCAD AR6-11 EN SET..-S
STORE BYT6
BYT7: HRRI SC,1(SCAD)
STORE BYT7
GO SCSUB ;SHIFT SUBROUTINE
GO BYTMQ ;MQ MASK OF SIZE
BYT7A: TLO PC,BIS
SETOM BISF ;2ND PART OF BYTE FIX
HLRZ SCAD,AR
ASH SCAD,-^D12
HRRM SCAD,SC ;SC FM AR0-5[1]...P
STORE BYT7A
MOVEM AR,PONTR# ;SAVE NEW POINTER FOR PNT ROUTINE
MOVE BR ;AD BR+EN SET.
TLZ 777740
TRZ -1
IORM IR
JRST IT1+1
BYTMQ: LSH MQ,1 ;SUBROUTINE TO
TRO MQ,1
RTN ;MAKE A MASK IN MQ
;BYTE ,FIRST CYCLE INCREMENT
INCBYT: STORE ET0
BYT1: HLRZ SCAD,AR
ASH SCAD,-^D12
HRRM SCAD,SC ;SC FM AR0-5[1]...P
HLRZ AR
ASH -6
ANDI 77
SUB SCAD,0 ;SCAD AR6-11 EN SET
TRC -1
PUT 0
STORE BYT1
INCBY1: TRNN SCAD,400
JRST BYT4
BYT2: TRZ SC,-1 ;SC CLR
ADDI AR,1 ;AR FM AD(J) ; Y+1
STORE BYT2
BYT3: HRRI SC,144 ;SC GET 36 DECIMAL
STORE BYT3
HLRZ AR
ASH -6
ANDI 77
HRRZ SCAD,SC
SUB SCAD,0
JRST INCBY1
BYT4: HRLZ SCAD
LSH ^D12
TLZ AR,770000
XORM AR ;AR0-5 FM SCAD3-8(J)
TRZ SC,-1 ;SC CLR
GET SCAD ;ADDER GET AR 6-11
STORE BYT4
TLNN IR,4000 ;IR IBP?
JRST SS9-1 ;YES.
MCWR
JRST BYT7
;BYTE SECOND PART
SECOND: TRC SC,-1 ;SCAD SC COMP SET, SCAD SC NEG SETUP
HRRI SC,1(SC) ;SC FM SCAD(J)
STORE ET0
TLZ PC,BIS
TLNE IR,2000
JRST DPBET0 ;GO TO DEPOSIT BYTES
GO SCSUB ;CALL SHIFT SUBROUTINE
LBT1: LSH AR,-1 ;FOR LOAD BYTE
AND AR,MQ ;AR FM MQ[0]
STORE LBT1
JRST ST0
;DEPOSIT BYTES
DPBET0: GO SCSUB ;CALL SHIFT SUBROUTINE
GO BYTSH ;SHIFT AR,MQ LEFT
DBT1: MOVE AD,BR ;AD BR+EN SET
STORE DBT1
DBT2: MOVE BR,AR ;BR FM AR(J)
MOVE AR,MQ ;AR FM MQ(J)
MOVE MQ,AD ;MQ FM AD(J)
SETCM AD,AR ;AD AR-EN SET
STORE DBT2
DBT3: AND BR,AR ;BR FM AR[0]
MOVE AR,AD ;AR FM AD(J)
MOVE AD,BR ;AD BR+EN SET
STORE DBT3
DBT4: AND AR,MQ ;AR FM MQ[0]
STORE DBT4
IOR AR,AD ;AR FM AD[1]
DBT5: STORE DBT5
JRST ST0 ;GO TO STORE TIME
BYTSH: LSH AR,1 ;SHIFT AR MQ
LSH MQ,1 ;SEPERATELY
RTN
PDLOVF: ASCIZ ?
PUSHDOWN LIST OVERFLOW.
?