DataMuseum.dk

Presents historical artifacts from the history of:

RegneCentralen RC3600/RC7000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RegneCentralen RC3600/RC7000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦1c56c4868⟧ TextFile

    Length: 23040 (0x5a00)
    Types: TextFile
    Names: »CAA50«

Derivation

└─⟦a137c8bca⟧ Bits:30001766 PL FAERD ASCII NR 9
    └─ ⟦this⟧ »/CAA50« 

TextFile

; C O M P L E T T E   CALL-MODUL  MED ALLE CALLRUTINER
; OG FIND ER FORB. FOR BEGGE VERSIONER!

; IDAG-CALL-MODUL
;  MED TORBEN TAMBO'S CARDREAD I AKTUEL VERSION *LIDT FARLIG*
;  SIDSTE RETTELSE 1.10.81 KL 16
;  BUF ÆNDRET SÅ RESCH-KONTROL UDELADES (=> NO LOOP)
;  CARDREAD INPUTZONE ØGET TIL 50 ISTF 41 (KORTMARK-FEJL-RISIKO


PRDE1                                ; PROCESS HEAD 
CDR11                                ; ADDRESS OF CARDREAD REV 1.03 
.TXT @CARDREAD@                      ; NAME OF     -------''------- 


FINDT
.TXT "FINDTEGN"		; FRA CAA42, ALLE ØVR FRA CAACF PÅ DISKETTE
			; MED FÆRDIGE CALL-RUTINER
; SUBRUTINETABEL

BUF00
.TXT @BUF<0><0><0><0><0>@



GME00				; GMEM-ADRESSE
.TXT "GMEM<0><0><0><0>"		; NAVN

FLM00
.TXT @FLYTMAT<0>@

FIN00
.TXT @FIND<0><0><0><0>@



KSP00
.TXT "KODESPEC"

SME00
.TXT "SMEM<0><0><0><0>"

FIX00
.TXT "FIX<0><0><0><0><0>"

FLO00
.TXT "FLOAT<0><0><0>"

0
«ff»
GME00:	2
	REAL
	REAL+REFERENCE
	LDA  	2,+0,2		; AC1=A-ADRESSE
	EXECUTE
	GSM00
	RET1
	LDA	1,+0,2		; JA: AC1=INDHOLD AF ADRESSE
	BCALL FLOAT		; AC1 -> KOMMATAL
	LDA	2,U.STK,3
	LDA @	2,+1,2		; AC2=B-ADRESSE
	STA	2,GME01		; GEM B-ADRESSE
	LDA	2,CUR
	A.PDOUBLE		; GEM ADRESSEINDHOLD(A) I B
	1
GME01:	0
	RET1			; END GMEM

«ff»
GSM00:	LDA 	0,+0,2		; HENT A
	LDA	1,+1,2
	BCALL FIX		; FIX A
	ADCZR	2,2		; AC2=1B0-1
	MOV	0,0,SNR		; 0<=AC1<=1B0-1
	SNG	1,2
	JMP  ERR90		; NEJ: ERROR UDSKRIV MEDD.
	MOV	1,2		; AC1-->AC2
	RET1			; RETURN
          
             SUB    0,0
             STA    0,RESCH     ; INDFØJET 01.10.81

ERR90:	ERROR
	90

ERR91:	ERROR
	91
KSP00:	0
	READS	0
	STA	0,KSP01
	RET1
KSP01:	0
«ff»
SME00:	2			; 2 VARIABLE
	REAL		; A (=A-ADRESSE)
	REAL		; B (=DATA)
	LDA	0,KSP01		; SE GME00
	LDA	1,KSP02
	SUB	1,0,SZR
	JMP  ERR90
	LDA 	2,+1,2		; AC2(!)=B-ADRESSE
	LDA	0,+0,2		; HENT REAL(!) B
	LDA	1,+1,2
	BCALL FIX		; FIX B
	MOV	0,0,SZR		; 0<=B<=65535 ?
	JMP  ERR91		; NEJ ERROR-RETURN
	STA	1,U.S00,3	; GEM AC1(B) I U.S00.USER
	LDA@	2,U.STK,3
	EXECUTE			; EXEC GSM00(A-ADRESSE)
	GSM00
	RET1
	LDA	1,U.S00,3	; AC1=F(UDA+U.S00)=B
	STA	1,+0,2		; AC1-->ADR.AC2
	RET1			; END STOREMEMORY
KSP02:	42798
«ff»
BUF00:	3			; 3 VARIABLE
	REAL			; A
	REAL			; OG B
	REAL+REFERENCE		; OG C
	LDA	1,RESCH		; HENT RESERVATIONSSTATUS (RESCH)
	SUBZL	0,0		; AC0=1
	SUB#	1,0 ,SKP	; RESCH=AC0??
	JMP	.-3		; JA: PRØV IGEN
	STA	0,RESCH		; NEJ: SÆT RESCH=1
	LDA @   1,+2,2		; AC1=F(F(USER.U.STK)+1)=C-ADRESSE
	STA	1,BADRE		; GEM C-ADRESSE
	LDA	2,+1,2		; AC2=B-ADRESSE
	LDA	0,+0,2		; HENT B=VARBUFNR
	LDA	1,+1,2
	BCALL FIX
	SUBC	2,2		; AC2=0
	INCOL	2,2		; AC2=3
	MOV	0,0,SNR		; LIGGER 0<=VARBUFNR<=3 ?
	SNG	1,2
	JMP ERR90-2		; NEJ: RETURN MED ERROR 90  ** CB RET
	MOVZL	1,1		; AC1=1
	LDA	2,BUFAD		; AC2=BUFFERADRESSE
	ADD	2,1		; AC1=AC1+AC2
	STA	1,ADRES		; GEM ADRESSE(VARNR)
	SUBZL	0,0		; AC0=1
	LDA @	2,U.STK,3
	LDA	0,+0,2		; HENT A(1. ORD)
	LDA	2,CUR
	MOV	0,0,SZR		; A=0???
	JMP PART2		;
	LDA	3,ADRES		; HENT BUFADRESSE
	LDA	0,+0,3		; AC0=F(ADRES)
	LDA	1,+1,3		; AC1=F(ADRES+1)
	LDA	2,CUR
	A.PDOUBLE		;	AC'S-->B
	1			; 	SEGMENT NUMBER
BADRE:	0			;	B-ADRESSE
	JMP UD		;
PART2:	SUBZL	0,0
	LDA	1,BADRE		; NEJ:	HENT B-ADRESSE
	A.GDOUBLE		; 	HENT B-->;AC'S
	LDA	3,ADRES		; AC3=BUFADRESSE(VARNR)
	STA	0,+0,3		; AC'S-->BUF(VARNR)
	STA	1,+1,3
UD:	SUB	0,0		; AC0=0
	STA	0,RESCH		; RESCH=0
	RET1			; END BUF
				;
RESCH:	0			; RESERVERINGSSTATUS
BUFAD:	BUFTB
BUFTB:	.BLK 8			; VARBUF OMRÅDE
ADRES:	0
«ff»
FIX00:	3
	REAL+REFERENCE
	REAL+REFERENCE
	REAL+REFERENCE
	SUBZL	0,0		; AC0=1
	LDA @ 	1,+0,2		; AC1=A-ADRESSE
	LDA	2,CUR		; AC2=CUR
	A.GDOUBLE		; HENT A
	STA	0,U.S00,3	; GEM ORD 1 AF A
	SUBC	0,0		; AC0=0
	BCALL FLOAT		; FLOAT ORD2 AF A
	LDA	2,CUR		; AC2=CUR
	LDA	3,U.STK,3	; AC3=F(F(USER)+U.STK)
	LDA @	3,+2,3		; AC3=C-ADRESSE
	STA	3,FIX01		; GEM C-ADRESSE
	A.PDOUBLE		; GEM FLOAT AF ORD2 AF A I B
	1
FIX01:	0
	LDA	1,U.S00,3	; HENT ORD1 AF A
	SUBC	0,0		; AC0=0
	BCALL FLOAT		; FLOAT ORD1 AF A
	LDA	2,CUR		; AC2=CUR
	LDA	3,U.STK,3	
	LDA @	3,+1,3		; AC3=B-ADRESSE
	STA	3,FIX02		; GEM B-ADRESSE
	A.PDOUBLE		; GEM FLOAT AF ORD2 AF A I C
	1
FIX02:	0
	RET1			; END FIX
«ff»
FLO00:	3
	REAL
	REAL
	REAL+REFERENCE
	LDA  	2,+0,2		; AC1=A-ADRESSE
	EXECUTE			; EXEC FLO02
	FLO02
	RET0			; HVIS ERROR
	STA	1,U.S00,3	; GEM DEL 1 AF C
	LDA	2,U.STK,3
	LDA  	2,+1,2		; AC1=B-ADRESSE
	EXECUTE
	FLO02
	RET0
	LDA	0,U.S00,3	; HENT DEL 1 AF C
	LDA	2,U.STK,3
	LDA @	2,+2,2		; AC2=C-ADRESSE
	STA	2,FLO01		; GEM C-ADRESSE
	LDA	2,CUR
	A.PDOUBLE		; AC0,AC1-->C
	1
FLO01:	0
	RET1
FLO02:	LDA	0,+0,2
	LDA	1,+1,2		; ** CB RET **
	BCALL FIX		; LAV OM TIL HELTAL
	MOV	0,0,SNR		; 0=<A/B=<32K ???
	RET1			; JA: RETURN
	ERROR			; NEJ: RETURN MED ERROR 90
	90.
«ff»
CDR11:    2                          ; INCLUDE TWO PARAMETERS 
          REAL                       ; INFORMATOR 
          REAL+ARRAY                 ; DATA STORAGE 
          LDA   1,RSTAT              ; LOAD RESERVATION STATUS 
          SZ    1,1                  ; SKIP ON ROUTINE IDLE 
          JMP   .-2                  ; BY REPEATING 
          LDA   1,+5,2               ; LOAD MAX. NO OF ROWS 
          LO    0,0                  ; 0=1 
          SEQ   0,1                  ; SKIP IF NO OF ROWS=1 
          JMP   ERR31 
                                     ; JMP TO 'INDEKSFEJL' 
          LDA   1,DMADR              ; LOAD ADDRESS OF CORE DUMP AREA 
          DOB   1,.CDR               ; INSTRUCT CDR CONTROLLER 
          DOAS  0,.CDR               ; READ A BINARY CARD 
          SKPBZ .CDR                 ; WAIT UNTIL BUSY=0 
          JMP   .-1                  ; REPEAT 
          DIBC  0,.CDR               ; 0=LAST ADDRESS AND CLOSE DEVICE
                   STA   0,U.S05,3             ; STORE LAST CORE ADDRESS
 
          SUB   1,0                  ; NUMBER OF COLUMNS READ 
          LZ    1,1                  ; 1=0 
          SNZ   0,0                  ; SKIP IF NOT ZERO 
          JMP   ERR10                ; IF ZERO JMP TO 'KORTLÆSNINGSFEJL' 
        LZ     0,0                   ; 0=0 
        DOA    0,.CDR                ; READ STATUS WORD 
        DIA    0,.CDR                ; INPUT STATUS WORD 
        STA    0,ERRCODE             ; SAVE ERROR CODE 
        SZ     0,0                   ; SKIP IF 0=0 
        JMP    ERR10                 ; JUMP TO 'KORTLÆSNINGSFEJL' 
        ;«ff»
            
; ***** READY FOR CONVERTING & TRANSFER  ****** 
        LDA    2,0,2                 ; 2=ADDRESS OF REAL 
        LDA    0,0,2                 ; 0= 1. WORD OF REAL 
        LDA    1,1,2                 ; 1= 2. WORD OF REAL 
        BCALL  FIX                   ; FIX REAL 
        SNZ    1,1                   ; SKIP IF NOT ZERO 
        JMP    ASCII                 ; JUMP TO ASCII CONVERSION 
        LO     0,0                   ; 0=1 
        SNE    1,0                   ; SKIP IF 0 NOT EQUAL TO 1 
        JMP    NUMBER                ; JUMP TO NUMBER CONVERSION 
SNART:  LDA   2,U.STK,3              ; LOAD STACKPOINTER
        LDA   2,+1,2                   ; LOAD ADDRESS OF FIRST VECTOR ELEMENT
        LDA   2,+0,2                  ; LOAD ARRAY ADDRESS

        STA   2,APD03                 ; STORE VECTOR ADDRESS IN APD03
LOOPE:  LDA   0,DMADR                ; LOAD CURRENT CORE ADDRESS
        MOV  0,2
 
        LDA   1,0,2                  ; LOAD CONTENTS OF CORE ADDRESS 
        INC   0,0                    ; INCREMENT ADDRESS BY ONE 
        STA   0,DMADR                ; SAVE DMADR 
        LZ    0,0                    ; 0=0 
        BCALL FLOAT                  ; CONVERT COLUMN DATA TO FLOATING POINT 
        LDA   2,CUR                  ; LOAD ZONE ADDRESS 
        A.PDOUBLE                    ; PUT CARD DATA INTO VECTOR ELEMENTS 
        1                            ; SEGMENT NO. 1=DATA SEGMENT 
APD03:  0                            ; ADDRESS OF REAL(INDEX) 
        LDA   1,U.S05,3              ; LOAD LAST DUMP ADDRESS 
        LDA   0,DMADR                ; LOAD CURRENT DATA LOCATION IN CORE 
        SNE   1,0                    ; SKIP IF NOT EQUAL 
        JMP   OUT00                  ; EXIT FROM ROUTINE 
        LDA   2,APD03                ; LOAD VECTOR ELEMENT ADDRESS 
        INC   2,2                    ; INCREMENT  
        INC   2,2                    ; INCREMENT 2. TIME 
        STA   2,APD03                ; STORE VECTOR ELEMENT ADDRESS AGAIN 
        JMP   LOOPE                  ; CONTINUE TO LOOPE 
        .EJEC   
; **** FINISH CARDREAD PROGRAM **** 
OUT00:  LDA   1,DMOMR               ; LOAD FIRST CORE ADDRESS 
        STA   1,DMADR                ; RESTORE DMADR 
        LZ    1,1                    ; 1=1 
        STA   1,RSTAT                ; RESTORE RESERVATION STATUS 
        RET1                         ; ORDINARY RETURN TO COMAL 
; 
; **$KORTLÆSNINGSFEJL 
ERR10:  STA   1,RSTAT                ; RESTORE RESERVATION STATUS 
        ERROR 
        10                           ; ERRORNOUS RETURN 
; 
; **$INDEKSFEJL 
ERR31:  STA   1,RSTAT                ; RESTORE RESERVATION STATUS 
        ERROR 
        31                           ; ERRORNOUS RETURN 
; 
; **L 
; **$LABEL DECLARATION 
; 
RSTAT:  0                            ; RESERVATION STATUS 
ERRCO:  0                            ; SAVED ERROR CODE FROM CDR CONTROLLER 
«ff»
DMADR:  DMADD                        ; ADDRESS OF CORE DUMP AREA 
.CDR=   14                           ; CARDREADER NUMBER 
;  ** AT THE MOMENT DUMMIES 
«ff»
; NUMBER converting for CARDREAD call routine  
  
; accu. use  ____________________________________________  
;            !           !  ac0 !  ac1 !  ac2 !   ac3   !  
;            ____________________________________________  
;            ! at entry  !   1  !   1  ! undef!  user   !  
;            ! runtime   ! data ! mover!adr/12!  count  !  
;            ____________________________________________  
;  
NUMBER:  LDA   2,DMADR           ; fetch core dump address  
NUMB0:   LDA   3,USER            ;--''-- USER  
         LDA   3,U.S05,3         ; load saved last address  
         SNE   3,2               ; skip DMADR-U.S05 not equal   
         JMP   FINIS             ; end number if equal  
         LDA   0,0,2             ; load specific data word  
         LO    1,1               ; 1=1 (could be replaced w/SUBZ)  
         MOV   1,3               ; 3 also =1  
BZZ:     SNE   0,1               ; skip on no equality 
         JMP   ADJUST            ; finis bzz if 0=1 
         MOVL  1,1               ; shift ac1 left 
         INC   3,3               ; increment counter register 
         LDA   2,88,0            ; 2=13 
         SEQ   2,3               ; if 2=3 continue bzz 
         JMP   BZZ               ; if 2 not equal to 3 continue bzz 
ADJUST:  LDA   2,DMADR           ; load current address in core
         LDA   0,86,0             ; LOAD PAGE ZERO CONSTANT 10
         SUB   3,0                ; 10-data
 
         STA   0,0,2             ; store counter register contents 
         INC   2,2               ; increment core address 
         STA   2,DMADR           ; save core address 
         JMP   NUMB0             ; continue number routine 
FINIS:   LDA   2,DMOMR           ; load 1.address backup 
         STA   2,DMADR           ; restore core dump area address 

         LDA   3,USER
         JMP   SNART             ; end of number converting routine 
; 
; tal konvertering rutine  
; indtastning afsluttet d.22.09.81 kl.14.42.00 ved  
;        $Torben Tambo 
; 
«ff»
ASCII:  JMP SNART                    ; ASCII  CONVERSION 
DMOMR:  DMADD                      ; ADDRESS OF CORE DUMP AREA AGAIN
DMADD:  .BLK 50                        ; CORE DUMP AREA
; 
; 
; 1. INDTASTNING AFSLUTTET DEN 14.09.81 KL. CA 14.30 VED Torben Tambo 
; 
        .EJEC    
                                  ; END PROCESS DESCRIBTOR 
«ff»
FIN00:	4			; 4 VARIABLE :
	REAL			; B = DET DER SØGES PLACERET
	REAL+ARRAY		; A = DET DER SØGES I
	REAL			; MAX(A) = MAX BRUGT I A
	REAL+REFERENCE		; INDEX = STED TIL RESULTAT
	LDA	0,+7,2		; DIM(A)-->US00
	STA	0,U.S00,3
	LDA @	1,+3,2		; FLYT INDEX OVER I FEN05 ** CB RET **
	STA	1,FIN05
	LDA	0,+9,2		; HENT MAX(A)
	LDA	1,+10,2	
	BCALL FIX		; FIX MAX(A)
	LDA	2,U.S00,3	; AC2=DIM(A)
	MOV	0,0,SNR		; ER MAX(A)>=0 OG
	SUBZ#	1,2,SNC		; ER MAX(A)<=DIM(A)
	JMP ER31		; NEJ - INDEXFEJL
	MOV	1,1,SNR		; ER MAX=0
	JMP FIN03		; JA - HOP (LAD INDEX=1)
	STA	1,U.S01,3	; US01=MAX(A)=MAX
	SUBZL	0,0
	STA	0,U.S00,3	; US00=MIN=1
	LDA	2,U.STK,3
	LDA@	1,+0,2		; FLYT B-ADRESSE OVER I NÆRVÆRENDE LAGER
	STA	1,BADR
	LDA	1,+6,2		; FLYT STARTADR PÅ MATRIX OVER I US12
	STA	1,U.S12,3
	JSR BEADR		; AC0 ER HER 1
	JSR TESTB		; ER B<A(1) ?
	JMP FIN04		; JA - HOP (LAD INDEX=1)
	LDA	0,U.S01,3	; NEJ - AC0=MAX
	JSR BEADR
	JSR TESTB		; ER B>=A(MAX)
	JMP .+2
	JMP FIN03		; JA - HOP (LAD INDEX=MAX+1)
FIN01:	LDA	0,U.S00,3	; AC0=MIN
	LDA	1,U.S01,3	; AC1=MAX
	ADDZR	1,0		; AC0=MIDT=(MIN+MAX) DIV 2
	JSR BEADR
	JSR TESTB		; B>=A(MIDT)
	JMP FIN02		; NEJ HOP
	INC	0,0		; AC0=MIDT+1
	JSR BEADR
	JSR TESTB		; B<A(MIDT+1)
	JMP FIN04		; JA - HOP SLUT (INDEX=MIDT+1)
	NEG	0,0		; AC0=AC0-1=MIDT
	COM	0,0
	STA	0,U.S00,3	; MIN=MIDT
	JMP FIN01		; FORFRA
FIN02:	STA	0,U.S01,3	; MAX=MIDT
	JMP FIN01		; FORFRA
FIN03:	INC	0,0		; INDEX=INDEX+1
FIN04:	MOV	0,1		; AC0,AC1=0,INDEX IE FIXTAL INDEX
	SUB	0,0
	BCALL FLOAT		; AC0,AC1=FLOAT INDEX
	LDA	2,CUR
	A.PDOUBLE		; GEM INDEX
	1
FIN05:	0
	RET1			; SLUT

ER31:	ERROR
	31

BADR:	0

«ff»
				; DENNE RUTINE SAMMENLIGNER DET TAL (X) 
				; DER LIGGER PÅ ADRESSEN ANGIVET I AC1
				; MED B, DER ER ANGIVET VED BADR

TESTB:	LDA	2,USER
	STA	0,U.S11,2	; GEM AC0 VÆK
	STA	3,U.S10,2	; GEM RETADR I US10
	SUBZL	0,0		; AC0=1
	LDA	2,CUR
  JMP .+1 ; EVT JMP .+7 OPTION (SØG PÅ BEGGE WORDS) 22.10.83 PL
	A.GWORD
	LDA	2,BADR		; AC2=B'S ADRESSE
	ADCZ#	2,0,SNC	; (RETTET! /NU KUN CKECK PÅ 1.ORD)
	ISZ	U.S10,3		; HVIS X>B   RETURN TIL LINK+0
	LDA	0,U.S11,3	; HENT AC0 TILBAGE
	JMP @	U.S10,3		; RETURN

	A.GDOUBLE
	LDA 2,BADR
	BCALL FSUB
	MOVZL 0,0,SBN
	ISZ U.S10,3
	LDA 0,U.S11,3
	JMP @ U.S10,3
				;     ! CALL ! RET
				;-------------------
	JMP	+1,1		; AC0 !  ?   !  =
				; AC1 !ADR.X !  %
				; AC2 !  ?   !  %
	JMP	+1,1		; AC3 !  ?   ! UDA



				; DENNE RUTINE BEREGNER DEN EFFEKTIVE
				; ADR PÅ ET INDEX I EN MATRIX, HVIS 
				; FØRSTE ELEMENTS ADR ER ANGIVET VED 
				; US12.
				; BEREGNINGEN ER MED LOWBOUND=1

BEADR:	MOV	3,1		; AC1=AC3, AC0=INDEX VED START
	LDA	3,USER
	STA	1,U.S10,3	; GEM RET-ADR VÆK
	STA	2,U.S11,3	; GEM AC2
	LDA	2,U.S12,3	; AC2=ADR(MAT(1))
	NEG	0,1
	COMZL	1,1		; INDEX=(INDEX-1)*2
	ADD	2,1		; AC1=ADR(MAT(1))+INDEX
	LDA	2,U.S11,3	; HENT AC2 IGEN
	JMP @	U.S10,3		; RETURN
				;     ! CALL ! RET
				;-------------------
				; AC0 !INDEX !INDEX
				; AC1 !  ?   ! ADR
				; AC2 !  ?   !  =
				; AC3 !  ?   ! UDA


«ff»
FLM00:	4
	REAL+ARRAY		; A = DET DER SKAL FLYTTES I
	REAL			; INDEX = HVORFRA DER SKAL FLYTTES
	REAL			; ANTAL = HVORLANGT ..
	REAL			; MAX   = SIDSTE ELEMENT BRUGT I A
	LDA	0,+4,2
	STA	0,U.S12,3	; GEM ADR(A(1)) I US12
	LDA	0,+7,2
	LDA	1,+8,2		; HENT INDEX
	BCALL FIX		; FIX INDEX
	MOV	0,0,SNR		; ER 0<=INDEX<=32767 OG
	MOV	1,1,SNR		; ER INDEX<>0 ?
	JMP ER31		; NEJ
	STA	1,U.S01,3	; GEM INDEX I US01
	LDA	2,U.STK,3
	LDA	0,+11,2
	LDA	1,+12,2		; HENT MAX
	BCALL FIX		; FIX MAX
	LDA	2,U.STK,3
	LDA	2,+5,2		; HENT DIM(A)
	SUBZ#	1,2,SZC		; ER MAX<=DIM(A) OG
	MOV	0,0,SZR		; ER MAX>=0 ?
	JMP ER31		; NEJ
	LDA	0,U.S01,3	; AC0=INDEX
	STA	1,U.S02,3	; GEM MAX I US02
	INC	1,1		; AC1=MAX+1
	SUBZ	0,1,SNC		; AC1=MAX+1-INDEX, ER AC1>=0 ?
	JMP ER31		; NEJ
	MOV	1,1,SNR		; ER AC1=0 ?
	RET1			; JA SLUT
	STA	1,U.S00,3	; GEM ANT=MAX+1-INDEX I US00
	LDA	2,U.STK,3
	LDA	0,+9,2		; HENT ANTAL
	LDA	1,+10,2
	BCALL FIX		; FIX ANTAL
	MOVZL	0,0,SZC		; ER ANTAL POSITIV ?
	JMP FLM01		; NEJ
	LDA	2,U.STK,3
	LDA	2,+5,2		; AC2=DIM(A)
	LDA	0,U.S02,3	; AC0=MAX
	ADD	1,0		; AC0=ANTAL+MAX
	SUBZ	0,2,SNC		; AC2=DIM(A)-ANTAL-MAX ER AC2>=0 ?
	JMP ER31		; NEJ
	ADCZL	2,2		; AC2=-2
	STA	2,U.S03,3	; GEM -2 I US03
	MOVZL	1,1		; ANTAL=ANTAL*2
	STA	1,U.S07,3	; GEM ANTAL*2 I US07
	LDA	0,U.S02,3	; AC0=MAX
	JSR BEADR		; AC1=ADR(A(MAX))
	STA	1,U.S04,3	; GEM AC1 I US04
	JMP FLM03		; KLAR TIL LOOP
«ff»
FLM01:	LDA	0,U.S01,3	; HVIS ANTAL NEGATIV: AC0=MAX
	ADDZ	1,0,SZC		; ER ANTAL+MAX>=0 OG
	MOV	0,0,SNR		; ER ANTAL+MAX<>0 ?
	JMP ER31		; NEJ
	SUB	0,0
	INCZL	0,0		; AC0=2
	STA	0,U.S03,3	; GEM 2 I US03
	MOVZL	1,1		; AC1=ANTAL*-2
	STA	1,U.S07,3	; GEM ANTAL*-2 I US07
	LDA	0,U.S01,3	; AC0=INDEX
	JSR BEADR		; AC1=ADR(A(INDEX))
	STA	1,U.S04,3	; GEM AC1 I US04
	JMP FLM03		; KLAR TIL LOOP
FLM02:	LDA	0,U.S04,3	; US04=US04+US03 DVS ADRESSEN BLIVER
	LDA	1,U.S03,3	; JUSTERET PASSENDE +/-2 ALT EFTER OM 
	ADD	0,1		; LØKKEN KØRER FORLÆNS EL. BAGLÆNS
	STA	1,U.S04,3
FLM03:	LDA	2,CUR
	SUBZL	0,0
	A.GDOUBLE		; HENT A(ADR-US04)=X
	LDA	2,U.S04,3	; BEREGN DEPOSIT ADRESSE :
	LDA	3,U.S07,3	; LAD D.ADR=FLM04=US04+US07
	ADD	2,3
	STA	3,FLM04
	LDA	2,CUR
	A.PDOUBLE		; GEM X I A(ADR.US04+US07)
	1
FLM04:	0
	DSZ	U.S00,3		; TÆL LØKKETÆLLER(=ANT) EN NED.  ANT=0?
	JMP FLM02		; NEJ FLRTSÆT
	RET1			; JA SLUT

; HELE LOOPRUTINEN KAN SES SOM FLG:
; REPEAT
;   LET A(ADR.US04+US07)=A(ADR.US04)
;   LET US04=US04+US03 ; US00=US00-1
; UNTIL US00=0

«ff»
; PHK & PL 10.10.83 FLG SIDE FRA CAA42, FOREG ER FRA CAACF

; 	TILFØJELSE AF FINDTEGN TIL CA23 - NY FIL CAA41

;	CALL"FINDTEGN",S$,TXT$,START,FUNDET 

FINDT:	 4 
	 STRING 
	 STRING 
	 REAL 
	 REAL+REFER 
		; PDTA		S$ PDA
		;		TXT$ PDA
		;		STARTINDEX PDA (REAL)
		;		FUNDETINDEX PDA (REAL+REFERENCE)
		; S$ PDA 	ADR I DATASEGM
		;		NO BYTES
		;		SEGM NO
		; TXT$ PDA	ADR I DATASEGM
		;		NO BYTES
		;		SEGM NO (=1)
		; START PDA	1.WORD IN FLOATING REPR
		; 		2.WORD
		; FUNDET PDA	ADR I DATASEGM

		;  21.9.81 PL ADRESSERING AF DATA ER JUSTERET TIL
		;  KORREKT FACON DVS FX S$-ADR FINDES VED LDA @ 1,0,2
		;  ISTF LDA 1,4,2 (SOM FORUDSÆTTER AT PDA FØLGER EXACT EFTER PDT)


		; US00		INDEX
		; US01		S$(1) TEXT DER SKAL FINDES
		; US02		BYTEADR FOR TXT$(INDEX) I DATASEGMENTET

	 LDA @ 1,0,2	 ;HENT S$ WORD ADR. 
	 LDA 2,CUR 
	 LDA 0,80 
	 A.GBYTE 
	 STA 0,U.S01,3	 ;FØRSTE CHR. AF S$ 
	 LDA 2,U.STK,3
	LDA 2,2,2
	LDA 0,+0,2	;HENT START INDEKS 
	 LDA 1,+1,2 
	 BCALL FIX 
	 MOV 0,0,SZR 
	 JMP ERUD1	 ;NEGATIV 
	 MOV 1,0 
	 STA 1,U.S00,3	 
	 LDA 2,U.STK,3 
	LDA @ 1,1,2	; PL 23.9.81
	 ADD 0,1 	 ;TXT$(INDEKS) BYTE ADR. I AC1 
		; PL 20.9.81 RETTELSER:
	STA 1,U.S02,3 	; US02=BYTEADR FOR TXT$(INDEX) I DATASEGM
 
	; FLG RUTINE FORUDSÆTTER
	; AC0	AC1	AC2	AC3
	; ü	TXT$(I)	PDTA	USER
	;    	BY-ADR

     LOP1:
	LDA 2,1,2	; ER INDEX<=LEN(TXT$) ? ELLERS 
	LDA 0,1,2	; AC0 ØGES MED 1  21.9.81 -23.9
	LDA 2,U.S00,3	; EX:
	INC 0,0		; C=0  AC2=0110 COMPL-> 1001
	ADCZ # 2,0,SNC	; AC0=LEN(TXT$)+1    =  0111  => C=1
 	JMP EJF
	 LDA 2,CUR	;FLYTTET AF PL 
		; PL RETT. SLUT
	 LDA 0,80 
	 A.GBYTE	 ;HENT BYTE TXT$(INDEKS) 
	 LDA 1,U.S01,3	 ; HENT S$ 
		ISZ U.S00,3	; FORØG INDEX (! INDEN !! EVT UDGANG AF RUTINEN!)
	 SUB 0,1,SNR	 ;ENS? 
 		JMP FUNDT ; !!!!!!!!!!!!!!!!!!!! H E R !!!!!!!
	 ISZ U.S02,3	 ;FORØG BYTE ADR. 
	LDA 1,U.S02,3	; PL TILFØJELSE SØNDAG 17.9.81
	LDA 2,U.STK,3	; PDTA I AC2 MANGLEDE / PL 23.9.81
	 JMP LOP1 
  
ERUD1:	 ERROR	 ;INDEKSFEJL 
	 31 
	  
FUNDT: 	LDA 1,U.S00,3	 	 ;FUNDET 
	 SUB 0,0	; STED=INDEKS 
NNN:	  BCALL FLOAT 
	 LDA 3,U.STK,3 
	 LDA @ 3,3,3 
	 STA 3,WADRS
	 LDA 2,CUR 
	 A.PDOUBLE 
	 1 
WADRS:	 0 
	 RET1 
 
 EJF:	; ADC 1,1 FJERNET PL SØNDAG
 	 ADC 0,0
	 ADC 1,1 	;IKKE FUNDET STED=-1 
	 JMP NNN 


 PRDE2 ; DENNE SIDE TILFØJET FRA CAA42 MENS FOREG. SIDER ER FRA CAACF
; PÅ DISKETTEN MED FÆRDIGE CALL-RUTINER

; ETABL PHK $ PL 10.10.83 KL 23 ETC ....

«ff»
«nul»