1
0
mirror of https://github.com/PDP-10/its.git synced 2026-03-02 18:04:38 +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:
Adam Sampson
2018-04-10 00:57:34 +01:00
committed by Adam Sampson
parent d1b101b3eb
commit 6984267e18
2 changed files with 172 additions and 58 deletions

View File

@@ -1495,7 +1495,7 @@ respond "*" ":midas sys2;ts xhost_sysen3;xhost\r"
expect ":KILL"
# FACTOR
respond "*" ":midas sys1;ts factor_sysen3;factor\r"
respond "*" ":midas sys1;ts factor_rz;factor\r"
expect ":KILL"
# compile lisp compiler

View File

@@ -1,5 +1,3 @@
;Factor integers using trial division -*-MIDAS-*-
;This was reconstructed in 2018 from AI:SYS1;TS FACTOR, dated 1977-09-27.
TITLE FACTOR
@@ -13,6 +11,7 @@ DV=5
P=6
.MLLIT==1
KL10==1 ;;KL10 RUNS SLOWER IN ACS
TYIC==1
TYOC==2
@@ -20,7 +19,7 @@ INFOC==3
PDLL=100
LOC 7
IFE KL10, LOC 7
TEST: TRC .+1,6
INCR: ADDI DV,2
RETEST: MOVE Z,C
@@ -32,56 +31,151 @@ RETEST: MOVE Z,C
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
IFE KL10, LOC 100
GO: MOVE P,[-PDLL,,PDL]
.OPEN TYIC,[0,,(SIXBIT /TTY/)]
JRST KILL
.OPEN TYOC,[1,,(SIXBIT /TTY/)]
.VALUE 0
JRST KILL
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
ANDI A,177
JRST @TYIDIS(A)
TYIDIS: HUH ;^@
HUH ;^A
HUH ;^B
HUH ;^C
HUH ;^D
HUH ;^E
HUH ;^F
KILL ;^G
HUH ;^H
HUH ;^I
HUH ;^J
HUH ;^K
HUH ;^L
HUH ;^M
HUH ;^N
HUH ;^O
HUH ;^P
HUH ;^Q
HUH ;^R
HUH ;^S
HUH ;^T
HUH ;^U
HUH ;^V
HUH ;^W
HUH ;^X
HUH ;^Y
HUH ;^Z
HUH ;^[
HUH ;^\
HUH ;^]
HUH ;^^
HUH ;^_
STM2 ;sp
HUH ;!
HUH ;"
HUH ;#
HUH ;$
HUH ;%
HUH ;&
HUH ;'
HUH ;(
HUH ;)
TIMES ;*
PLUS ;+
HUH ;,
MINUS ;-
HUH ;.
DIVIDE ;/
NUMBER ;0
NUMBER ;1
NUMBER ;2
NUMBER ;3
NUMBER ;4
NUMBER ;5
NUMBER ;6
NUMBER ;7
NUMBER ;8
NUMBER ;9
HUH ;:
HUH ;;
HUH ;<
EQUAL ;=
HUH ;>
INFO ;?
HUH ;@
HUH ;A
HUH ;B
CLIST ;C
DECIMA ;D
HUH ;E
FACTOR ;F
HUH ;G
QUERY ;H
HUH ;I
HUH ;J
HUH ;K
LARGE ;L
HUH ;M
LOAD ;N
HUH ;O
HUH ;P
HUH ;Q
RADSET ;R
HUH ;S
HUH ;T
HUH ;U
HUH ;V
HUH ;W
HUH ;X
HUH ;Y
HUH ;Z
HUH ;[
HUH ;\
HUH ;]
POWER ;^
HUH ;_
HUH ;`
HUH ;a
HUH ;b
CLIST ;c
DECIMAL ;d
HUH ;e
FACTOR ;f
HUH ;g
QUERY ;h
HUH ;i
HUH ;j
HUH ;k
LARGE ;l
HUH ;m
LOAD ;n
HUH ;o
HUH ;p
HUH ;q
RADSET ;r
HUH ;s
HUH ;t
HUH ;u
HUH ;v
HUH ;w
HUH ;x
HUH ;y
HUH ;z
HUH ;{
HUH ;|
HUH ;}
HUH ;~
RESET ;rubout
NUMBER: IMUL B,RADX
MUL C,RADX
ADDI D,-"0(A)
TLZE D,400000
@@ -92,25 +186,36 @@ LOOP: PUSHJ P,TYI
INFO: PUSHJ P,INFOPN
.IOT INFOC,1
JUMPLE A,RESET
JUMPL A,RESET
CAIE A,3
CAIN A,14
JRST RESET
.IOT TYOC,1
JRST INFO+1
INFOPN: .SUSET [.SSNAM,,[SIXBIT/.INFO./]]
.OPEN INFOC,[.UAI,,'DSK ? SIXBIT/FACTOR/ ? SIXBIT/ORDER/]
INFOPN: .CALL [ SETZ
SIXBIT /OPEN/
,,[0,,INFOC]
,,[SIXBIT /DSK/]
,,[SIXBIT /FACTOR/]
,,[SIXBIT /ORDER/]
400000,,[SIXBIT /.INFO./]]
JRST INFLOS
POPJ P,
CPOPJ: POPJ P,
INFLOS: SUB P,[1,,1]
MOVE B,[440700,,[ASCIZ \CAN'T OPEN INFO FILE\]]
MOVE B,[440700,,[ASCIZ \Can't open info file\]]
JRST Q3
QUERY: PUSHJ P,INFOPN
QUERY: MOVE B,[440700,,[ASCIZ/elp /]]
PUSHJ P,OUT
PUSHJ P,INFOPN
.IOT TYIC,2
PUSHJ P,CR
CAIL 2,"0
CAILE 2,"9
JRST Q0
MOVE 2,[440700,,[ASCIZ/ DIGIT/]]
MOVE 2,[440700,,[ASCIZ/ digit/]]
JRST Q3
Q0: .IOT INFOC,1
JUMPL A,Q1
@@ -140,6 +245,11 @@ Q3: ILDB 1,2
.IOT 2,1
JRST .-3
OUT: ILDB A,B
JUMPE A,CPOPJ
.IOT TYOC,A
JRST .-3
LOAD: MOVE B,M1
MOVE C,M2
JRST LOOP
@@ -280,10 +390,14 @@ TYO: .IOT TYOC,A
TYI: .IOT TYIC,A
POPJ P,
PDL: BLOCK PDLL+1
KILL: .BREAK 16,160000
VARIABLES
CONSTANTS
VARIABLES
END G0
PDL: BLOCK PDLL+1
PAT: BLOCK 100
END GO