1
0
mirror of https://github.com/PDP-10/its.git synced 2026-02-06 08:34:38 +00:00
Files
PDP-10.its/src/syseng/h10d.4
2020-04-02 05:54:26 +02:00

256 lines
4.5 KiB
Groff
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
TITLE H10D 710923 2320
RELOCATABLE
A=1
B=2
C=3
C1=4
D=5
E=6
F=7
P=10
DEFINE GCMD AC
DATAI AC
TERMINATE
DEFINE PART N
P!N: ADDI N,
III==1_<6-N>
TLNE N,1
TROA III
TRZ III
TERMINATE
DEFINE SET N
ILDB 15,16
PP!N: MOVE 15,BOT+400(15)
HRRM 15,P!N
TERMINATE
DEFINE ADJUST N
HRRZ 16,P!N
IMULI 16,3
ADD N,16
TERMINATE
OFST=100-$.
LODBEG":
OFFSET 100-.
JRST WAIT
JRST RDI
WAIT": JSR INIT
AOS CMD ;GENERATE <JFCL 1> IN CMD
WAIT2: XCT CMDQ ;MAYBE A QUIT PENDING
XCT CMD ;MAYBE GET COMMAND FROM OTHER PROCESSOR
GCMD B ;IF NOT THEN GET COMMAND FROM DATA SWITCHES
JUMPL B,WAIT2
TLNE B,200000
JRST PLAY
TLNE B,2000
JRST WAIT2
TLNE B,100000
JRST TUNE
TLNE B,10000
JRST RDI1
JRST WAIT2
INIT: 0 ;SET UP PDL ETC.
MOVEI P,PDL
MOVE B,[LUPQ] ;INITIALIZE COMMAND AREA
MOVEM B,CMDQ2
MOVSI B,(JFCL)
MOVEM B,CMD
MOVEM B,CMDQ
JRST @INIT
;STANDARD ROUTINES CALLED FROM OTHER PROCESSOR:
;PLAYNT" - PLAY WITH DEFAULT TEMPO
;PLAYST" - PLAY WITH SPECIFIED TEMPO
;ADJST" - ADJUST TO SPEED OF MACHINE (RESTART)
;TUNE" - DETUNE SLIGHTLY ACCORDING TO ARG
;PLAYSL" - PLAY FROM SELECTED LOCATION (MUST BE EVEN)
;COMMAND AREA
QUITC"==.-OFST
QUITB": ;BEGINNING OF QUIT AREA
CMDQ2: JRST SAVPC ;EXECUTED FROM J-1, MUNGED TO LUPQ (AOJL 15,Q)
CMDQ": JRST WAIT ;OR JFCL
QUITE": ;END OF QUIT AREA
H10CMD": ;COMMAND-TYPE COMMAND AREA
ARG: 0 ;MAYBE ARGUMENT
CMD: JFCL ;ACTUAL COMMAND (CLOBBERED TO JFCL BY INIT, AOS'ED BY WAIT)
PLAYNT": SKIPA C,TMPO ;PLAY WITH DEFAULT TEMPO
PLAYST": HRRZ C,ARG ;COMMAND FROM OTHER PROCESSOR TO PLAY WITH SPECIFIED TEMPO
MOVEI 17,0 ;START PLAYING AT BEGINNING
JRST PLAY2 ;FEED ARG TO REGULAR ROUTINE
PLAY: MOVE C,B ;DATA SWITCH COMMAND TO PLAY,
MOVEI 17,0 ;START AT THE BEGINNING
TDZA C,[-2,,400000]
PLAYSL": SKIPA 17,ARG ;COMMAND FROM OTHER PROCESSOR TO START PLAYING AT SPECIFIED PLACE
TLZN C,1 ;FIGURE OUT WHETHER TO SET TEMPO
HRRZ C,TMPO ;NO TEMPO SPECIFIED, GET DEFAULT TEMPO
PLAY2: CAIGE C,100
JRST WAIT
HRRZM C,TMPO ;SAVE AS DEFAULT TEMPO
IMUL C,TEMPC
IDIV C,TEMPK
HRRM C,TEMPO
JRST J
TEMPO: IDIVI 15,1000 ;ADDRESS MODIFIED EACH TIME IT STARTS TO PLAY
GCMD 16
JUMPL 16,WAIT
ADDI 17,2
ADJUST 1
ADJUST 2
ADJUST 3
ADJUST 4
ADJUST 5
ADJUST 6
Q: PART 1
PART 2
PART 3
PART 4
PART 5
PART 6
XCT CMDQ2 ;AOJL 15,Q OR JRST SAVPC
LUPQ=AOJL 15,Q
J: MOVE 16,[617,,MUST]
SET 1
SET 2
SET 3
SET 4
SET 5
SET 6
MOVE 15,MUST(17) ;NEGATIVE DURATION
JUMPN 15,TEMPO
JRST WAIT
SAVPC: HRRZM 17,ARG ;QUIT ROUTINE (QUIT ORDERED BY OTHER PROCESSOR)
XCT CMDQ ;JFCL OR JRST WAIT
JRST .-1 ;WAIT FOR .IOT TO FINISH
TEMPC": 0 ;62213
TEMPK: 122700
TMPO": 1514 ;TEMPO BEFORE COMPENSATION FOR MACHINE SPEED
TUNE": HRL 0,B
HRRZM B,DETUN
MOVE C,[220300,,B]
MOVNI D,21
TUNE1: ILDB A,C
IMULI A,100
ADDI A,BOT
HRRM A,J+23(D)
ADDI D,3
JUMPL D,TUNE1
TUNE2: GCMD D
TLNE D,100000
JRST TUNE2
JRST WAIT
RELOAD: HRLZ 0,DETUN
JRST RDI+1
RDI": HRLZI 0,444444
JSR INIT ;INITIALIZE PDL AND COMMAND AREA
PUSHJ P,CRLF
ADJST":
RDI1: SETZM TAB
SETZM TAB+1
CONO 635550
CONO PI,11577
MOVE A,[JSR BK0]
MOVEM A,42
MOVEI D,24
HLLZS Q(D)
SUBI D,4
JUMPGE D,.-2
HRLZI 15,400000 ;0 BUT WITH SIGN BIT SET SO AS TO CAUSE AOJL TO JUMP
MOVNI 14,60.
CONO PI,12300 ;TURN ON PI
SETZM BK0 ;CLEAR OUT JSR PC
CONO 3001 ;ENABLE CLOCK, CLEAR FLAG, SET PIA TO 1
SKIPN BK0 ;WAIT FOR FIRST INTERRUPT
JRST .-1
JRST Q ;SEE HOW FAR 15 INCREMENTS DURING 1 SECOND
CRLF: MOVEI C,15
PUSHJ P,TYO
MOVEI C,12
TYO: DATAO TTY,C
CONSZ TTY,20
JRST .-1
POPJ P,
BK0: 0
CONO 1001 ;TURN OFF CLOCK FLAG
AOJGE 14,BK1 ;JUMP ON SIXTIETH BREAK
JRST 12,@BK0
BK1: CONO PI,11577 ;DONE WITH PI, TURN IT OFF
HRRZ A,BK0 ;GET PC INTERRUPTED FROM
SUBI A,Q ;CONVERT TO # INSTRUCTIONS EXECUTED
TLZ 15,400000 ;CONVERT TO # TIMES LOOP EXECUTED
IMULI 15,J-Q ;CONVERT TO # INSTRUCTIONS EXECUTED DURING CLOSED LOOPS
ADD A,15 ;GET TOTAL # INSTRUCTIONS EXECUTED
MOVE C,T1
MOVE C1,T2
DIV C,A
MOVEM C,TEMPC
MOVE B,C
MOVEI A,TABX
BK1A: HRRM A,BK1B
MOVEI D,13
BK1B: MOVEM C,(D) ;ADDRESS MODIFIED AT BK1A
MUL C,MAGIC ;*DIVIDE* BY THE TWELFTH ROOT OF 2
SOJGE D,.-2
ASH B,-1
MOVE C,B
SUBI A,14
CAIL A,TAB
JRST BK1A ;GO PROCESS NEXT OCTAVE
MOVEM C,13(A)
MOVEI A,TAB-BOT-2
MOVE C,BOT+100(A)
MUL C,DTC
MOVEM C,BOT(A)
SOJGE A,.-3
BK1C: GCMD D
TLNE D,10000
JRST BK1C
JRST WAIT
DTC: 377400000000
DETUN: 444444
T1: 0
T2: 147320000000
MAGIC: 361503374705 ;2^(-1/12)
CONSTANTS
LODEND"=.-OFST ;END OF AREA TO BE PUT INTO PDP10 CORE
BOT: BLOCK 700
TAB: BLOCK 77
TABT: BLOCK 1
TABX=TABT-14
PDL: BLOCK 20
MUST": ;BEGINNING OF DATA AREA
END ;END RDI"