|
DataMuseum.dkPresents historical artifacts from the history of: RegneCentralen RC3600/RC7000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RegneCentralen RC3600/RC7000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 3584 (0xe00) Types: TextFile Names: »RR«
└─⟦d85593a46⟧ Bits:30000470 DOMUS disk image - User files └─⟦this⟧
PRDE1 ; ASSEMBLER CODED SUBROUTINE. ; THE ROUTINE SORTS N NUMBERS IN THE ARRAY A ; ; JESPER TRAFF 1978, COPYRIGHT (C) JESPER TRAFF. ; ; SUBROUTINE TABLE. SORT .TXT *SORT<0><0><0><0>* 0 ; COREAREA POINTED OUT BY U.STK ; ; A ARRAY TO BE SORTED. ; N NUMBER OF ELEMENTS TO BE SORTED. ; B BOOLEAN. ; A: ADDRESS OF ARRAY ; NUMBER OF ROWS ; NUMBER OF COLUMNS ; N: ACTUAL PARAMETER (HIGH) ; - - (LOW) ; B: - - (HIGH) ; - - (LOW) SORT: 3 REAL+ARRAY REAL REAL LDA 2,0,2 ; CHECK FOR INDEX ERRORS IN PARAMS. LDA 0,2,2 MOV 0,0,SZR JMP ERR31 ; ARRAY MUST ONLY HAVE ONE SUBSCRIPT. LDA 2,U.STK,3 LDA 2,1,2 LDA 0,0,2 LDA 1,1,2 BCALL FIX MOVZL 0,0,SZC JMP ERR31 ; N IS NEGATIVE. ADC 0,0 ADD 0,1 STA 1,U.S00,3 ; M=N-1 LDA 2,U.STK,3 LDA 2,0,2 LDA 0,1,2 ADCZ# 1,0,SNC JMP ERR31 ; N LARGER THAN A(MAX). LDA 2,U.STK,3 LDA 2,2,2 LDA 0,0,2 LDA 1,1,2 BCALL FIX LDA 2,INCREAS MOV 0,0,SNR MOV 1,1,SZR INC 2,2 ; CREATE SNR INSTRUCTION. STA 2,U.S09,3 LDA 1,U.S00,3 ; ; LOOP1: MOV 1,1,SNR ; M=0 RET1 ; YES - RETURN TO BASIC. LDA 2,U.STK,3 LDA 2,0,2 LDA 0,0,2 STA 0,U.S07,3 ; ADJUST ADDRESS(A(LOWBOUND)). INC 0,0 INC 0,0 STA 0,U.S08,3 ; ADJUST ADDRESS(A(LOWBOUND+1)). SUBZL 0,0 STA 0,U.S01,3 ; M1=1 STA 0,U.S02,3 ; K=1 ; ; LOOP2: SUBZL 0,0 LDA 1,U.S07,3 LDA 2,CUR A.GDOUBLE ; GET A(K) STA 0,U.S03,3 STA 1,U.S04,3 SUBZL 0,0 LDA 1,U.S08,3 A.GDOUBLE ; GET A(K+1) STA 0,U.S05,3 STA 1,U.S06,3 LDA 2,U.S09,3 STA 2,TEST LDA 2,ADD1 ADD 3,2 BCALL FSUB TEST: 0 ; A(K)<A(K+1) OR A(K)>A(K+1). (DEPENDING ON B) JMP A ; ; SUBZL 0,0 ; YES - EXCHANGE A(K) WITH A(K+1). STA 0,PUT1+1 STA 0,PUT2+1 LDA 0,U.S07,3 STA 0,PUT1+2 LDA 0,U.S05,3 LDA 1,U.S06,3 LDA 2,CUR PUT1: A.PDOUBLE 0 0 LDA 0,U.S08,3 STA 0,PUT2+2 LDA 0,U.S03,3 LDA 1,U.S04,3 PUT2: A.PDOUBLE 0 0 LDA 1,U.S02,3 STA 1,U.S01,3 ; M1=K ; ; A: LDA 0,U.S02,3 INC 0,0 STA 0,U.S02,3 ; K=K+1 LDA 1,U.S00,3 SUBZ# 0,1,SNC ; K>M JMP B LDA 0,U.S08,3 STA 0,U.S07,3 ; ADJUST ADDRESS(A(K)). INC 0,0 INC 0,0 STA 0,U.S08,3 ; ADJUST ADDRESS(A(K+1)). JMP LOOP2 ; ; B: ADC 0,0 LDA 1,U.S01,3 ADD 0,1 STA 1,U.S00,3 ; M=M1-1 JMP LOOP1 ERR31: ERROR 31 ADD1: U.S03 INCREAS:MOVZL 0,0,SZC ; SORT NUMBERS IN INCREASING ORDER. PRDE2 *$«nul»