|
|
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: 21504 (0x5400)
Types: TextFile
Names: »CAA45«
└─⟦c99ffa672⟧ Bits:30001786 SG0006 Floppy
└─⟦this⟧ »/CAA45«
; 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
«ff»
; 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
«ff»
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
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
; ! 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»