mirror of
https://github.com/PDP-10/its.git
synced 2026-02-06 08:34:38 +00:00
256 lines
4.5 KiB
Groff
256 lines
4.5 KiB
Groff
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"
|
||
|