From 6984267e18b9fcbf11feac844c751a3931f90c92 Mon Sep 17 00:00:00 2001 From: Adam Sampson Date: Tue, 10 Apr 2018 00:57:34 +0100 Subject: [PATCH] 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. --- build/build.tcl | 2 +- src/{sysen3/factor.101 => rz/factor.26} | 228 ++++++++++++++++++------ 2 files changed, 172 insertions(+), 58 deletions(-) rename src/{sysen3/factor.101 => rz/factor.26} (58%) diff --git a/build/build.tcl b/build/build.tcl index 7038dd18..30306f37 100644 --- a/build/build.tcl +++ b/build/build.tcl @@ -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 diff --git a/src/sysen3/factor.101 b/src/rz/factor.26 similarity index 58% rename from src/sysen3/factor.101 rename to src/rz/factor.26 index 867eeded..67cfe891 100644 --- a/src/sysen3/factor.101 +++ b/src/rz/factor.26 @@ -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 + \ No newline at end of file