|
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: 24576 (0x6000) Types: TextFile Names: »P4AF7«
└─⟦92491b7d7⟧ Bits:30001772 UDVIKLING AF CALLRUTINER ETC NR 2 └─⟦this⟧ └─⟦ee9e554ad⟧ Bits:30001809 SG0107 Floppy └─⟦this⟧
; CALLRUTINE FINDTEGN PL. P-H. HANS RUNE SVEND MF. ; 10.09.81 16.40.00 ; DER ER INDLAGT STANDARDRUTINER FRA CAASM, OG ALT DETTE TILHØRER ; ACSII-FILENS SIDE 1 --- SÅLEDES AT FINDTEGN & AFSLUTNING LIGGER PÅ SIDE 2 ; IØVRIGT ER FILEN RETTET SØNDAG 20.9.81 AF PL ; ENDV. HAR JEG INDLAGT GET FRA MMTX4 MED RETTELSER (BEM MORTEN MARQUARD) ; ; JUSTERET VIDERE SØNDAG (DET VAR JO D.20.9.81) KL 22 ; ; ENDV JUSTERET I FINDTEGN 21.9.81 SÅ DER IKKE 'SNYDES' MED AT HENTE PARAMETRE PRDE1 FINDT .TXT "FINDTEGN" GET00 .TXT "GET<0><0><0><0><0>" ; FLG SUBR. STAMMER FRA CAASM:11 SOM IGEN ER DEL AF CAA25 (IDAG-RUTINERNE) GME00 ; GMEM-ADRESSE .TXT "GMEM<0><0><0><0>" ; NAVN 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 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 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 ERR90: ERROR 90 ERR91: ERROR 91 KSP00: 0 READS 0 STA 0,KSP01 RET1 KSP01: 0 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 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 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. ;STANDARDRUTINER SLUT, ;HEREFTER FINDTEGN OG GET UNDER INDKØRING & MED FORKL. ;I VERSION SØNDAG AFTEM 20.9.81 KL 22 FF ; ;ASCII-FIL SIDE 1 SLUT & DEREFTER SIDE 2: «ff» ; 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 ; US00 INDEX ; US01 S$(1) TEXT DER SKAL FINDES ; US02 BYTEADR FOR TXT$(INDEX) I DATASEGMENTET LDA @ 1,0,2 ;HENT S$ WORD ADR. MOVL 1,1 ;BYTE 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 @ 2,1,2 MOVL 1,1 ;TXT$ (1) BYTE ADR. 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 JMP EJF LDA 0,1,2 LDA 2,U.S00,3 ; EX: INC 2,2 ; 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$ SUB 0,1,SNR ;ENS? JMP FUNDT ISZ U.S00,3 ;FORØG INDEKS ISZ U.S02,3 ;FORØG BYTE ADR. LDA 1,U.S02,3 ; PL TILFØJELSE SØNDAG 17.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 ; FØLGENDE ER HENTET FRA MMTX4:11 OG RETTET AF PL SØNDAG ; Program head MM-110981 ; Følgende call kan benyttes: ; CALL"GET",T$,A ; T$ = streng dimentioneret > A ; A = Antallet af tegn, der skal inputtes i T$. ; Ved call indeholder accumulatorerne følgende værdier ; AC2 = UDA+U.STK = PDTA ; AC3 = UDA ; ; Adresse Lagerindhold ; ======= ============ ; USER (page 0) UDA ; UDA+PIO Adr. af prim. I/O zone ; UDA + U.S00 User dataarealler ; UDA + U.S20 - ; UDA + U.S21 Subrutine tabel ; UDA + U.STK PDTA ; PDTA 0 T$ PDA ; 1 A PDA ; PDA T$ 2 Adr. af 1. byte. ; 3 Max ant. byte ; 4 Current ant. byte ; PDA A 5 1. word ; 6 2. word 0 ; GET00: 2 ; To variable STRING+REFERENCE ; T$ REAL ; og A LDA 0,+5,2 ; AC0 = 1. WORD AF A LDA 1,+6,2 ; AC1 = 2. WORD AF A BCALL FIX ; Hental => Kommatal MOV # 0,0,SZR JMP ERR31 ; Index fejl STA 1,U.S01,3 ; U.S01 = Antal chr, der skal inputtes. ; US00 = ; US01 = ANTAL CHR DER SKAL INDPUTTES ; US02 = BYTEADR AF 1. BYTE I T$ ; US03 = MAX ANTAL CHR I T$ (T$ SKAL VED KALD VÆRE <>"" ! ; REM PL SØNDAG - ER DET MENINGEN?????? LDA 2,U.STK,3 ; AC2=PDTA LDA 1,+2,2 ; AC1= WORDADR AF 1. BYTE I T$ MOVL 1,1 ; PL RETTELSE SØNDAG T$(INDEX) BYTEADR ; OG HVEM ER DEN TÅBE DER HAR FJERNET ASS CODED SUBR MANUALEN ; FRA NR 46, SÅ MAN KAN KONTROLLERE OM PDA W1 IKKE INDEH W-ADR !!! STA 1,U.S02,3 ; U.S02 = Adr. af 1. byte LDA 2,U.STK,3 LDA 1,+3,2 ; AC1=Max ant. chr. STA 1,U.S03 ; U.S03=AC1 LDA 0,U.S01 ; AC0=U.S01 SUBZL 0,1,SZC ; AC0 > AC1 ? JMP ERR31 ; JA => Index fejl. GET13: LDA 2,CUR ; AC2=CUR LDA 3,USER ; AC3=USER LDA 0,PIO,3 ; Adr. af primære I/O zone (term.). F.ICHAR ; Hent en carakter JMP ERRUD ; Hvis fejl. Skriv den ud. LDA 0,44 ; AC0=31 SUBZL 2,2 ; AC2=1 SUB 2,0 ; AC0=31 ; FLG BET. RETTET PL SØND:SUB # 1,0,SNR ; CHR > 31 (>='space') ADCZ # 1,0,SZC ; PL RETTELSE SØNDAG ILL TILFÆLDE 4 BIT ; C=0 AC1=0110 (HENTET BYTE FRA ICHAR) OG AC0=1100 ; AC1 COMPL =1001 ; AC0 EX =1100 (AC0>=AC1) ; SUM =0101 OG OVERFLOW=> C=1 OG DER SKIPPES IKKE ; DVS SKIP HVIS AC1<=AC0 DVS HVIS AC1<=31 (KORREKT?) JMP GET13 ; Nej !! Går tilbage til 'GET13' MOV 1,0 ; AC0 = AC1 LDA 1,U.S02,3 LDA 2,CUR A.PBYTE ; Put chr ud i T$. 1 ; Hvordan ud!! LDA 1,U.S02,3 ; GEM AC1 i U.S02 INC 1,1 ; AC1=AC1+1 STA 1,U.S02,3 ; GEM AC1 UD I 'U.S02' LDA 2,U.S01,3 ; AC2=U.S01 SUB # 1,0,SNR ; Input færdigt!! JMP GET13 ; Nej RET1 ; Ja ERR31: ERROR 31 ; Indexfejl (returner til BASIC) !! ERRUD: STA 2,+2,1 ERROR 0 ; Evt. BCALL IOERR PRDE2 ; PROGRAM SLUT «ff» ; 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 ; US00 INDEX ; US01 S$(1) TEXT DER SKAL FINDES ; US02 BYTEADR FOR TXT$(INDEX) I DATASEGMENTET LDA @ 1,0,2 ;HENT S$ WORD ADR. MOVL 1,1 ;BYTE 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 @ 2,1,2 MOVL 1,1 ;TXT$ (1) BYTE ADR. 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 JMP EJF LDA 0,1,2 LDA 2,U.S00,3 ; EX: INC 2,2 ; 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$ SUB 0,1,SNR ;ENS? JMP FUNDT ISZ U.S00,3 ;FORØG INDEKS ISZ U.S02,3 ;FORØG BYTE ADR. LDA 1,U.S02,3 ; PL TILFØJELSE SØNDAG 17.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 ; FØLGENDE ER HENTET FRA MMTX4:11 OG RETTET AF PL SØNDAG ; Program head MM-110981 ; Følgende call kan benyttes: ; CALL"GET",T$,A ; T$ = streng dimentioneret > A ; A = Antallet af tegn, der skal inputtes i T$. ; Ved call indeholder accumulatorerne følgende værdier ; AC2 = UDA+U.STK = PDTA ; AC3 = UDA ; ; Adresse Lagerindhold ; ======= ============ ; USER (page 0) UDA ; UDA+PIO Adr. af prim. I/O zone ; UDA + U.S00 User dataarealler ; UDA + U.S20 - ; UDA + U.S21 Subrutine tabel ; UDA + U.STK PDTA ; PDTA 0 T$ PDA ; 1 A PDA ; PDA T$ 2 Adr. af 1. byte. ; 3 Max ant. byte ; 4 Current ant. byte ; PDA A 5 1. word ; 6 2. word 0 ; GET00: 2 ; To variable STRING+REFERENCE ; T$ REAL ; og A LDA 0,+5,2 ; AC0 = 1. WORD AF A LDA 1,+6,2 ; AC1 = 2. WORD AF A BCALL FIX ; Hental => Kommatal MOV # 0,0,SZR JMP ERR31 ; Index fejl STA 1,U.S01,3 ; U.S01 = Antal chr, der skal inputtes. ; US00 = ; US01 = ANTAL CHR DER SKAL INDPUTTES ; US02 = BYTEADR AF 1. BYTE I T$ ; US03 = MAX ANTAL CHR I T$ (T$ SKAL VED KALD VÆRE <>"" ! ; REM PL SØNDAG - ER DET MENINGEN?????? LDA 2,U.STK,3 ; AC2=PDTA LDA 1,+2,2 ; AC1= WORDADR AF 1. BYTE I T$ MOVL 1,1 ; PL RETTELSE SØNDAG T$(INDEX) BYTEADR ; OG HVEM ER DEN TÅBE DER HAR FJERNET ASS CODED SUBR MANUALEN ; FRA NR 46, SÅ MAN KAN KONTROLLERE OM PDA W1 IKKE INDEH W-ADR !!! STA 1,U.S02,3 ; U.S02 = Adr. af 1. byte LDA 2,U.STK,3 LDA 1,+3,2 ; AC1=Max ant. chr. STA 1,U.S03 ; U.S03=AC1 LDA 0,U.S01 ; AC0=U.S01 SUBZL 0,1,SZC ; AC0 > AC1 ? JMP ERR31 ; JA => Index fejl. GET13: LDA 2,CUR ; AC2=CUR LDA 3,USER ; AC3=USER LDA 0,PIO,3 ; Adr. af primære I/O zone (term.). F.ICHAR ; Hent en carakter JMP ERRUD ; Hvis fejl. Skriv den ud. LDA 0,44 ; AC0=31 SUBZL 2,2 ; AC2=1 SUB 2,0 ; AC0=31 ; FLG BET. RETTET PL SØND:SUB # 1,0,SNR ; CHR > 31 (>='space') ADCZ # 1,0,SZC ; PL RETTELSE SØNDAG ILL TILFÆLDE 4 BIT ; C=0 AC1=0110 (HENTET BYTE FRA ICHAR) OG AC0=1100 ; AC1 COMPL =1001 ; AC0 EX =1100 (AC0>=AC1) ; SUM =0101 OG OVERFLOW=> C=1 OG DER SKIPPES IKKE ; DVS SKIP HVIS AC1<=AC0 DVS HVIS AC1<=31 (KORREKT?) JMP GET13 ; Nej !! Går tilbage til 'GET13' MOV 1,0 ; AC0 = AC1 LDA 1,U.S02,3 LDA 2,CUR A.PBYTE ; Put chr ud i T$. 1 ; Hvordan ud!! LDA 1,U.S02,3 ; GEM AC1 i U.S02 INC 1,1 ; AC1=AC1+1 STA 1,U.S02,3 ; GEM AC1 UD I 'U.S02' LDA 2,U.S01,3 ; AC2=U.S01 SUB # 1,0,SNR ; Input færdigt!! JMP GET13 ; Nej RET1 ; Ja ERR31: ERROR 31 ; Indexfejl (returner til BASIC) !! ERRUD: STA 2,+2,1 ERROR 0 ; Evt. BCALL IOERR PRDE2 ; PROGRAM SLUT «ff» ; 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 ; US00 INDEX ; US01 S$(1) TEXT DER SKAL FINDES ; US02 BYTEADR FOR TXT$(INDEX) I DATASEGMENTET LDA 1,4,2 ;HENT S$ WORD ADR. MOVL 1,1 ;BYTE 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 0,+10,2 ;HENT START INDEKS LDA 1,+11,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,+7,2 MOVL 1,1 ;TXT$ (1) BYTE ADR. 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 0,8,2 ; ER INDEX<=LEN(TXT$) ? ELLERS JMP EJF LDA 2,U.S00,3 ; EX: INC 2,2 ; 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$ SUB 0,1,SNR ;ENS? JMP FUNDT ISZ U.S00,3 ;FORØG INDEKS ISZ U.S02,3 ;FORØG BYTE ADR. LDA 1,U.S02,3 ; PL TILFØJELSE SØNDAG 17.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,+12,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 ; FØLGENDE ER HENTET FRA MMTX4:11 OG RETTET AF PL SØNDAG ; Program head MM-110981 ; Følgende call kan benyttes: ; CALL"GET",T$,A ; T$ = streng dimentioneret > A ; A = Antallet af tegn, der skal inputtes i T$. ; Ved call indeholder accumulatorerne følgende værdier ; AC2 = UDA+U.STK = PDTA ; AC3 = UDA ; ; Adresse Lagerindhold ; ======= ============ ; USER (page 0) UDA ; UDA+PIO Adr. af prim. I/O zone ; UDA + U.S00 User dataarealler ; UDA + U.S20 - ; UDA + U.S21 Subrutine tabel ; UDA + U.STK PDTA ; PDTA 0 T$ PDA ; 1 A PDA ; PDA T$ 2 Adr. af 1. byte. ; 3 Max ant. byte ; 4 Current ant. byte ; PDA A 5 1. word ; 6 2. word 0 ; GET00: 2 ; To variable STRING+REFERENCE ; T$ REAL ; og A LDA 0,+5,2 ; AC0 = 1. WORD AF A LDA 1,+6,2 ; AC1 = 2. WORD AF A BCALL FIX ; Hental => Kommatal MOV # 0,0,SZR JMP ERR31 ; Index fejl STA 1,U.S01,3 ; U.S01 = Antal chr, der skal inputtes. ; US00 = ; US01 = ANTAL CHR DER SKAL INDPUTTES ; US02 = BYTEADR AF 1. BYTE I T$ ; US03 = MAX ANTAL CHR I T$ (T$ SKAL VED KALD VÆRE <>"" ! ; REM PL SØNDAG - ER DET MENINGEN?????? LDA 2,U.STK,3 ; AC2=PDTA LDA 1,+2,2 ; AC1= WORDADR AF 1. BYTE I T$ MOVL 1,1 ; PL RETTELSE SØNDAG T$(INDEX) BYTEADR ; OG HVEM ER DEN TÅBE DER HAR FJERNET ASS CODED SUBR MANUALEN ; FRA NR 46, SÅ MAN KAN KONTROLLERE OM PDA W1 IKKE INDEH W-ADR !!! STA 1,U.S02,3 ; U.S02 = Adr. af 1. byte LDA 2,U.STK,3 LDA 1,+3,2 ; AC1=Max ant. chr. STA 1,U.S03 ; U.S03=AC1 LDA 0,U.S01 ; AC0=U.S01 SUBZL 0,1,SZC ; AC0 > AC1 ? JMP ERR31 ; JA => Index fejl. GET13: LDA 2,CUR ; AC2=CUR LDA 3,USER ; AC3=USER LDA 0,PIO,3 ; Adr. af primære I/O zone (term.). F.ICHAR ; Hent en carakter JMP ERRUD ; Hvis fejl. Skriv den ud. LDA 0,44 ; AC0=31 SUBZL 2,2 ; AC2=1 SUB 2,0 ; AC0=31 ; FLG BET. RETTET PL SØND:SUB # 1,0,SNR ; CHR > 31 (>='space') ADCZ # 1,0,SZC ; PL RETTELSE SØNDAG ILL TILFÆLDE 4 BIT ; C=0 AC1=0110 (HENTET BYTE FRA ICHAR) OG AC0=1100 ; AC1 COMPL =1001 ; AC0 EX =1100 (AC0>=AC1) ; SUM =0101 OG OVERFLOW=> C=1 OG DER SKIPPES IKKE ; DVS SKIP HVIS AC1<=AC0 DVS HVIS AC1<=31 (KORREKT?) JMP GET13 ; Nej !! Går tilbage til 'GET13' MOV 1,0 ; AC0 = AC1 LDA 1,U.S02,3 LDA 2,CUR A.PBYTE ; Put chr ud i T$. 1 ; Hvordan ud!! LDA 1,U.S02,3 ; GEM AC1 i U.S02 INC 1,1 ; AC1=AC1+1 STA 1,U.S02,3 ; GEM AC1 UD I 'U.S02' LDA 2,U.S01,3 ; AC2=U.S01 SUB # 1,0,SNR ; Input færdigt!! JMP GET13 ; Nej RET1 ; Ja ERR31: ERROR 31 ; Indexfejl (returner til BASIC) !! ERRUD: STA 2,+2,1 ERROR 0 ; Evt. BCALL IOERR PRDE2 ; PROGRAM SLUT «ff» ; 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 ; US00 INDEX ; US01 S$(1) TEXT DER SKAL FINDES ; US02 BYTEADR FOR TXT$(INDEX) I DATASEGMENTET LDA 1,4,2 ;HENT S$ WORD ADR. MOVL 1,1 ;BYTE 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 0,+10,2 ;HENT START INDEKS LDA 1,+11,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,+7,2 MOVL 1,1 ;TXT$ (1) BYTE ADR. 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 0,8,2 ; ER INDEX<=LEN(TXT$) ? ELLERS JMP EJF LDA 2,U.S00,3 ; EX: INC 2,2 ; C=0 AC2=0110 COMPL-> 1001 ADCZ # 2,0,SNZ ; 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$ SUB 0,1,SNR ;ENS? JMP FUNDT ISZ U.S00,3 ;FORØG INDEKS ISZ U.S02,3 ;FORØG BYTE ADR. LDA 1,U.S02,3 ; PL TILFØJELSE SØNDAG 17.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,+12,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 ; FØLGENDE ER HENTET FRA MMTX4:11 OG RETTET AF PL SØNDAG ; Program head MM-110981 ; Følgende call kan benyttes: ; CALL"GET",T$,A ; T$ = streng dimentioneret > A ; A = Antallet af tegn, der skal inputtes i T$. ; Ved call indeholder accumulatorerne følgende værdier ; AC2 = UDA+U.STK = PDTA ; AC3 = UDA ; ; Adresse Lagerindhold ; ======= ============ ; USER (page 0) UDA ; UDA+PIO Adr. af prim. I/O zone ; UDA + U.S00 User dataarealler ; UDA + U.S20 - ; UDA + U.S21 Subrutine tabel ; UDA + U.STK PDTA ; PDTA 0 T$ PDA ; 1 A PDA ; PDA T$ 2 Adr. af 1. byte. ; 3 Max ant. byte ; 4 Current ant. byte ; PDA A 5 1. word ; 6 2. word 0 ; GET00: 2 ; To variable STRING+REFERENCE ; T$ REAL ; og A LDA 0,+5,2 ; AC0 = 1. WORD AF A LDA 1,+6,2 ; AC1 = 2. WORD AF A BCALL FIX ; Hental => Kommatal MOV # 0,0,SZR JMP ERR31 ; Index fejl STA 1,U.S01,3 ; U.S01 = Antal chr, der skal inputtes. ; US00 = ; US01 = ANTAL CHR DER SKAL INDPUTTES ; US02 = BYTEADR AF 1. BYTE I T$ ; US03 = MAX ANTAL CHR I T$ (T$ SKAL VED KALD VÆRE <>"" ! ; REM PL SØNDAG - ER DET MENINGEN?????? LDA 2,U.STK,3 ; AC2=PDTA LDA 1,+2,2 ; AC1= WORDADR AF 1. BYTE I T$ MOVL 1,1 ; PL RETTELSE SØNDAG T$(INDEX) BYTEADR ; OG HVEM ER DEN TÅBE DER HAR FJERNET ASS CODED SUBR MANUALEN ; FRA NR 46, SÅ MAN KAN KONTROLLERE OM PDA W1 IKKE INDEH W-ADR !!! STA 1,U.S02,3 ; U.S02 = Adr. af 1. byte LDA 2,U.STK,3 LDA 1,+3,2 ; AC1=Max ant. chr. STA 1,U.S03 ; U.S03=AC1 LDA 0,U.S01 ; AC0=U.S01 SUBZL 0,1,SZC ; AC0 > AC1 ? JMP ERR31 ; JA => Index fejl. GET13: LDA 2,CUR ; AC2=CUR LDA 3,USER ; AC3=USER LDA 0,PIO,3 ; Adr. af primære I/O zone (term.). F.ICHAR ; Hent en carakter JMP ERRUD ; Hvis fejl. Skriv den ud. LDA 0,44 ; AC0=31 SUBZL 2,2 ; AC2=1 SUB 2,0 ; AC0=31 ; FLG BET. RETTET PL SØND:SUB # 1,0,SNR ; CHR > 31 (>='space') ADCZ # 1,0,SZC ; PL RETTELSE SØNDAG ILL TILFÆLDE 4 BIT ; C=0 AC1=0110 (HENTET BYTE FRA ICHAR) OG AC0=1100 ; AC1 COMPL =1001 ; AC0 EX =1100 (AC0>=AC1) ; SUM =0101 OG OVERFLOW=> C=1 OG DER SKIPPES IKKE ; DVS SKIP HVIS AC1<=AC0 DVS HVIS AC1<=31 (KORREKT?) JMP GET13 ; Nej !! Går tilbage til 'GET13' MOV 1,0 ; AC0 = AC1 LDA 1,U.S02,3 LDA 2,CUR A.PBYTE ; Put chr ud i T$. 1 ; Hvordan ud!! LDA 1,U.S02,3 ; GEM AC1 i U.S02 INC 1,1 ; AC1=AC1+1 STA 1,U.S02,3 ; GEM AC1 UD I 'U.S02' LDA 2,U.S01,3 ; AC2=U.S01 SUB # 1,0,SNR ; Input færdigt!! JMP GET13 ; Nej RET1 ; Ja ERR31: ERROR 31 ; Indexfejl (returner til BASIC) !! ERRUD: STA 2,+2,1 ERROR 0 ; Evt. BCALL IOERR PRDE2 ; PROGRAM SLUT «ff» «nul»