|
|
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 - metrics - download
Length: 3584 (0xe00)
Types: TextFile
Names: »RR«
└─⟦d85593a46⟧ Bits:30000470 DOMUS disk image - User files
└─⟦this⟧ »/RR«
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»