mirror of
https://github.com/PDP-10/its.git
synced 2026-01-29 13:21:11 +00:00
Import RZ;FACTOR 26 source.
Differences from AI's TS FACTOR: - KL10 define to put the TEST inner loop code at 100 rather than in the registers -- ";;KL10 RUNS SLOWER IN ACS". - Lookup table for commands, including uppercase and lowercase. - A new "quit" command. - Mixed-case messages. - System calls modernised a bit; .CALL /OPEN/ rather than .SUSET/.OPEN, and not opening the TTY in DDT mode.
This commit is contained in:
committed by
Adam Sampson
parent
d1b101b3eb
commit
6984267e18
@@ -1,289 +0,0 @@
|
||||
;Factor integers using trial division -*-MIDAS-*-
|
||||
;This was reconstructed in 2018 from AI:SYS1;TS FACTOR, dated 1977-09-27.
|
||||
|
||||
TITLE FACTOR
|
||||
|
||||
Z=0
|
||||
A=1
|
||||
B=2
|
||||
C=3
|
||||
D=4
|
||||
E=5
|
||||
DV=5
|
||||
P=6
|
||||
|
||||
.MLLIT==1
|
||||
|
||||
TYIC==1
|
||||
TYOC==2
|
||||
INFOC==3
|
||||
|
||||
PDLL=100
|
||||
|
||||
LOC 7
|
||||
TEST: TRC .+1,6
|
||||
INCR: ADDI DV,2
|
||||
RETEST: MOVE Z,C
|
||||
MOVE B,D
|
||||
IDIV Z,DV
|
||||
DIV A,DV
|
||||
CAMLE DV,A
|
||||
JUMPE Z,PRIME
|
||||
JUMPN B,TEST
|
||||
JRST FOUND
|
||||
|
||||
LOC 100
|
||||
G0: MOVE P,[-PDLL,,PDL]
|
||||
.OPEN TYIC,[10,,(SIXBIT /TTY/)] ;Open in "DDT mode" (don't echo CR etc.)
|
||||
.VALUE 0
|
||||
.OPEN TYOC,[1,,(SIXBIT /TTY/)]
|
||||
.VALUE 0
|
||||
DECIMA: MOVEI C,10.
|
||||
RADSET: MOVEM C,RADX'
|
||||
RESET: PUSHJ P,PROMPT
|
||||
ZBC: SETZB B,C
|
||||
|
||||
LOOP: PUSHJ P,TYI
|
||||
CAIN A,177 ;RUBOUT
|
||||
JRST RESET
|
||||
CAIN A,"R
|
||||
JRST RADSET
|
||||
CAIN A,"D
|
||||
JRST DECIMA
|
||||
CAIE A,":
|
||||
CAIN A,"*
|
||||
JRST TIMES
|
||||
CAIN A,"?
|
||||
JRST INFO
|
||||
CAIN A,"C
|
||||
JRST CLIST
|
||||
CAIN A,"Q
|
||||
JRST QUERY
|
||||
CAIN A,"N
|
||||
JRST LOAD
|
||||
CAIE A,";
|
||||
CAIN A,"+
|
||||
JRST PLUS
|
||||
CAIN A,"-
|
||||
JRST MINUS
|
||||
CAIN A,"L
|
||||
JRST LARGE
|
||||
CAIN A,"F
|
||||
JRST FACTOR
|
||||
CAIN A,40 ;space
|
||||
JRST STM2
|
||||
CAIN A,"/
|
||||
JRST DIVIDE
|
||||
CAIN A,"^
|
||||
JRST POWER
|
||||
CAIN A,"=
|
||||
JRST EQUAL
|
||||
CAIL A,"0
|
||||
CAILE A,"9
|
||||
JRST HUH ;Not recognised
|
||||
IMUL B,RADX
|
||||
MUL C,RADX
|
||||
ADDI D,-"0(A)
|
||||
TLZE D,400000
|
||||
AOS C
|
||||
ADD B,C
|
||||
MOVE C,D
|
||||
JRST LOOP
|
||||
|
||||
INFO: PUSHJ P,INFOPN
|
||||
.IOT INFOC,1
|
||||
JUMPLE A,RESET
|
||||
.IOT TYOC,1
|
||||
JRST INFO+1
|
||||
|
||||
INFOPN: .SUSET [.SSNAM,,[SIXBIT/.INFO./]]
|
||||
.OPEN INFOC,[.UAI,,'DSK ? SIXBIT/FACTOR/ ? SIXBIT/ORDER/]
|
||||
JRST INFLOS
|
||||
POPJ P,
|
||||
|
||||
INFLOS: SUB P,[1,,1]
|
||||
MOVE B,[440700,,[ASCIZ \CAN'T OPEN INFO FILE\]]
|
||||
JRST Q3
|
||||
|
||||
QUERY: PUSHJ P,INFOPN
|
||||
.IOT TYIC,2
|
||||
CAIL 2,"0
|
||||
CAILE 2,"9
|
||||
JRST Q0
|
||||
MOVE 2,[440700,,[ASCIZ/ DIGIT/]]
|
||||
JRST Q3
|
||||
Q0: .IOT INFOC,1
|
||||
JUMPL A,Q1
|
||||
CAIE 1,12 ;LINE FEED
|
||||
JRST Q0
|
||||
.IOT INFOC,1
|
||||
CAME 1,2
|
||||
JRST Q0
|
||||
.IOT INFOC,1
|
||||
JUMPL 1,Q1
|
||||
CAIE 1,11 ;TAB
|
||||
JRST Q0
|
||||
JRST .+2
|
||||
Q2: .IOT INFOC,1
|
||||
.IOT TYOC,1
|
||||
CAIE 1,12 ;LINE FEED?
|
||||
JRST Q2
|
||||
.IOT INFOC,1
|
||||
CAIN 1,11 ;TAB?
|
||||
JRST Q2+1
|
||||
JRST RESET
|
||||
|
||||
CLIST: SKIPA 2,[440700,,[ASCIZ 7 RD:*;+-/^NLF =QC?7]]
|
||||
Q1: MOVE 2,[440700,,[ASCIZ/ IGNORED/]]
|
||||
Q3: ILDB 1,2
|
||||
JUMPE 1,RESET
|
||||
.IOT 2,1
|
||||
JRST .-3
|
||||
|
||||
LOAD: MOVE B,M1
|
||||
MOVE C,M2
|
||||
JRST LOOP
|
||||
|
||||
POWER: MOVEI Z,-1(C)
|
||||
MOVE A,M2
|
||||
SETZ B,
|
||||
MOVE C,A
|
||||
POW1: IMUL B,A
|
||||
MUL C,A
|
||||
ADD B,C
|
||||
MOVE C,D
|
||||
SOJG Z,POW1
|
||||
JRST STM2
|
||||
|
||||
DIVIDE: MOVE A,C
|
||||
MOVE B,M1
|
||||
MOVE D,M2
|
||||
IDIV B,A
|
||||
DIV C,A
|
||||
JRST STM2
|
||||
|
||||
TIMES: IMUL B,M2
|
||||
MOVE A,C
|
||||
IMUL A,M1
|
||||
MUL C,M2
|
||||
ADD B,C
|
||||
ADD B,A
|
||||
TLZ B,400000
|
||||
MOVEM D,M2
|
||||
MOVEM B,M1
|
||||
JRST ZBC
|
||||
|
||||
MINUS: MOVNS C
|
||||
ADD C,[SETZ]
|
||||
AOS B
|
||||
MOVNS B
|
||||
PLUS: ADD C,M2
|
||||
ADD B,M1
|
||||
TLZE C,400000
|
||||
AOS B
|
||||
STM2: PUSHJ P,STM
|
||||
JRST ZBC
|
||||
|
||||
LARGE: MOVE B,L1'
|
||||
MOVE C,L2'
|
||||
JRST STM2
|
||||
|
||||
STM: MOVEM B,M1'
|
||||
MOVEM C,M2'
|
||||
POPJ P,
|
||||
|
||||
EQUAL: MOVE A,M1
|
||||
MOVE B,M2
|
||||
PUSHJ P,SPRAB
|
||||
JRST RESET
|
||||
|
||||
FACTOR: SKIPN C
|
||||
SKIPE B
|
||||
PUSHJ P,STM
|
||||
MOVE D,M1
|
||||
MOVE DV,M2
|
||||
TEST2: JUMPN D,.+3
|
||||
CAIG DV,3
|
||||
JRST SPRIME
|
||||
TRNE DV,1
|
||||
JRST ODD
|
||||
ASHC D,-1
|
||||
MOVEI B,2
|
||||
PRB: SETZM A
|
||||
PUSHJ P,SPRAB
|
||||
JRST TEST2
|
||||
ODD: MOVE A,D
|
||||
MOVE C,DV
|
||||
IDIVI A,3
|
||||
DIVI B,3
|
||||
JUMPN C,NO3
|
||||
MOVE D,A
|
||||
MOVE DV,B
|
||||
MOVEI B,3
|
||||
JRST PRB
|
||||
NO3: MOVE C,D
|
||||
MOVE D,DV
|
||||
MOVEI DV,5
|
||||
HRRI INCR,4
|
||||
JRST RETEST
|
||||
|
||||
FOUND: MOVE D,A
|
||||
SETZM A
|
||||
MOVE B,DV
|
||||
PUSHJ P,SPRAB
|
||||
MOVE C,Z
|
||||
JRST RETEST
|
||||
|
||||
SPRIME: MOVE C,D
|
||||
MOVE D,DV
|
||||
|
||||
PRIME: MOVEM C,L1
|
||||
MOVEM D,L2
|
||||
MOVE A,C
|
||||
MOVE B,D
|
||||
PUSHJ P,SPRAB
|
||||
JRST RESET
|
||||
|
||||
SPRAB: PUSHJ P,SPACE
|
||||
PRAB: MOVE C,B
|
||||
IDIVI A,10.
|
||||
DIVI B,10.
|
||||
HRLM C,(P)
|
||||
SKIPN B
|
||||
SKIPE A
|
||||
PUSHJ P,PRAB
|
||||
HLRZ A,(P)
|
||||
ADDI A,"0
|
||||
JRST TYO
|
||||
|
||||
SPACE: PUSH P,A
|
||||
MOVEI A,40
|
||||
PUSHJ P,TYO
|
||||
POP P,A
|
||||
POPJ P,
|
||||
|
||||
HUH: MOVEI A,"?
|
||||
PUSHJ P,TYO
|
||||
JRST LOOP
|
||||
|
||||
PROMPT: PUSHJ P,CR
|
||||
MOVEI A,"#
|
||||
PUSHJ P,TYO
|
||||
|
||||
CR: MOVEI A,15
|
||||
PUSHJ P,TYO
|
||||
MOVEI A,12
|
||||
|
||||
TYO: .IOT TYOC,A
|
||||
POPJ P,
|
||||
|
||||
TYI: .IOT TYIC,A
|
||||
POPJ P,
|
||||
|
||||
PDL: BLOCK PDLL+1
|
||||
|
||||
VARIABLES
|
||||
CONSTANTS
|
||||
|
||||
END G0
|
||||
|
||||
Reference in New Issue
Block a user