File UFO1.PS

Directory of image this file is from
This file as a plain text file

HE=",S:10:2,"  GESCHW.=",V:8:2,"  SPRIT=",SPRIT1," L");
WRITELN
("WIEVIEL LITER WOLLEN SIE ZUM BREMSEN INVESTIEREN?");
READLN;READ(SPRIT2);
IF SPRIT2>SPRIT1
THEN BEGIN
     SPRIT1:=SPRIT1;
    P:=SPRIT1
    END
ELSE
IF SPRIT2<0
THEN SPRIT1:=SPRIT1
ELSE SPRIT1:=SPRIT1-SPRIT2;
IF SPRIT2>P
THEN WRITELN
("SIE HABEN IHREN SPRITVORAT UEBERZOGEN,FLABES!!!!!")
ELSE IF SPRITPROGRAM ACKERMANN(IN,OUT);
VAR I,J:	INTEGER;
FUNCTION ACKER(M,N:	INTEGER):	INTEGER;
BEGIN
   IF M=0 THEN ACKER := N+1
          ELSE IF N=0 THEN ACKER := ACKER(M-1,1)
         	ELSE ACKER := ACKER(M-1,ACKER(M,N-1))
END;
BEGIN WRITE("I,J ");READLN;READ(I,J);
       WRITELN("ACKER(",I:1,",",J:1,") = ",ACKER(I,J):5)
END.

PROCEDURE EINGABE(VAR WORT:STRING); VAR LAENGE:INTEGER; BEGIN READLN; LAENGE:=1; REPEAT READ(WORT[LAENGE]; LAENGE:=LAENGE+1 UNTIL (LAENGE=100) OR EOLN; WORT[LAENGE]:="@" END (*EINGABE*); PROCEDURE AUSGABE(VAR WORT:STRING); VAR LAENGE:INTEGER; BEGIN LAENGE:=1; REPEAT WRITE(WORT[LAENGE]); LAENGE:=LAENGE+1 UNTIL WORT[LAENGE]="@" END (*AUSGAGE*); PROCEDURE VERTAUSCHE(VAR A,B:CHAR); VAR HILF:CHAR; BEGIN HILF:=A;A:=B;B:=HILF END (*VERTAUSCHE*); FUNCTION LAENGE(VAR WORT:STRING):INTEGER; VAR ANZAHL:INTEGER; BEGIN ANZAHL:=0; REPEAT ANZAHL:=ANZAHL+1 UNTIL WORT[ANZAHL]="@"; ANZAHL:=ANZAHL-1; LAENGE:=ANZAHL END (*LAENGE*); FUNCTION GLEICH(VAR WORT1,WORT2:STRING):BOOLEAN; VAR ABBRUCH:BOOLEAN; ZAEHLER:INTEGER; BEGIN ZAEHLER:=1; IF LAENGE(WORT1)<>LAENGE(WORT2) THEN NOT ABBRUCH ELSE REPEAT ABBRUCH:=WORT1[ZAEHLER]=WORT2[ZAEHLER]; ZAEHLER:=ZAEHLER+1 UNTIL (NOT ABBRUCH) OR (WORT1[ZAEHLER]="@"); GLEICH:=ABBRUCH END (*GLEICH*);
PROGRAM MINISIMULATION (IN,OUT); CONST P=50; D=20; TYPE WORT=ARRAY[1..4] OF CHAR; BEFEHL=RECORD OP:WORT; ADR:INTEGER; END; SPEICHER=RECORD OP:ARRAY[1..P] OF WORT; ADR:ARRAY[1..P] OF INTEGER; END; VAR DS:ARRAY[1..D] OF REAL; PS:SPEICHER; BR:BEFEHL; (*BEFEHLREGISTER*) ANTWORT:CHAR; PROCEDURE PROGEINGABE; VAR I:INTEGER; PROCEDURE LESE; VAR J:INTEGER; ZEICHEN:CHAR; BEGIN FOR J:=1 TO 4 DO BEGIN READ(ZEICHEN); PS.OP[I][J]:=ZEICHEN END END; BEGIN I:=0; READLN; REPEAT I:=I+1;WRITELN;WRITE(I:3);WRITE(" OPERATIONSTEIL:"); LESE(PS.OP[I]);WRITE(" ADRESSTEIL:");READ(PS.ADR[I]) UNTIL PS.OP[I][4]="." END; PROCEDURE PROGAUSGABE; VAR I:INTEGER; PROCEDURE SCHREIBE; VAR J:INTEGER; ZEICHEN:CHAR; BEGIN FOR J:=1 TO 4 DO BEGIN ZEICHEN:=PS.OP[I][J];WRITE(ZEICHEN) END END; BEGIN I:=0;WRITELN; WRITELN("DER PROGRAMMSPEICHER ENTHAELT FOLGENDES PROGRAMM:"); REPEAT I:=I+1 SCHREIBE(PS.OP[I]);WRITELN(" ",PS.ADR[I]:3) UNTIL PS.OP[I][4]="." END; PROCEDURE RUN; VAR BZR:INTEGER; (*BZR= BEFEHLSZAEHLREGISTER*) AC:REAL; PROCEDURE BEFEHLHOLEN(ADRESSE:INTEGER); BEGIN BR.OP:=PS.OP[ADRESSE]; BR.ADR:=PS.ADR[ADRESSE] END; PROCEDURE ACAUSGABE; BEGIN WRITELN("<AC>=",AC:10:4) END; PROCEDURE PROGSCHRITT; VAR I:INTEGER; BEGIN WRITELN(BZR:3,". PROGRAMMBEFEHL:"); WRITE("OPPERATIOLSTEIL:");FOR I:=1 TO 4 DO WRITE(BR.OP[I]); WRITE(" , ADRESSTEIL:",BR.ADR:3);WRITELN END; BEGIN (*-----RUN-----*) BZR:=0; REPEAT BZR:=BZR+1; BEFEHLHOLEN(BZR); PROGSCHRITT; CASE BR.OP[4] OF (*BEFEHLDECODIERUNG,DATENEINLESEN,AKKUMULATORAUSGABE*) "D":BEGIN WRITELN("DATENSPEICHERADRESSE ",BR.ADR:3,":"); READ(DS[BR.ADR]) END; "T":WRITELN("<DATENSPEICHERADRESSE ",BR.ADR:3," >=",DS[BR.ADR]:10:4); "E":BEGIN AC:=DS[BR.ADR];ACAUSGABE END; "R":BEGIN DS[BR.ADR]:=AC;ACAUSGABE END; "+":BEGIN AC:=AC+DS[BR.ADR];ACAUSGABE END; "-":BEGIN AC:=AC-DS[BR.ADR];ACAUSGABE END; "*":BEGIN AC:=AC*DS[BR.ADR];ACAUSGABE END; "/":IF DS[BR.ADR]<>0 THEN BEGIN AC:=AC/DS[BR.ADR];ACAUSGABE END ELSE BEGIN WRITELN("DIVISION DURCH 0 IST UNZULAESSIG,"); WRITELN("WERTBELEGUNG VON DS.ADR ",BR.ADR:3," AENDERN !") END; "P":BEGIN IF AC>0 THEN BZR:=BR.ADR-1;WRITELN("BZR=",BZR:3) END; "0":BEGIN IF AC=0 THEN BZR:=BR.ADR-1;WRITELN("BZR=",BZR:3) END; "O":BEGIN BZR:=BR.ADR-1;WRITELN("BZR=",BZR:3) END; END UNTIL BR.OP[4]="." END; (*-----RUN-----*) PROCEDURE DIALOGTEXT; BEGIN WRITELN("DIESES PROGRAMM BEARBEITET PROGRAMME, DIE AUS FOLGENDEN"); WRITELN("EINADRESSBEFEHLEN BESTEHEN:"); WRITELN("READ X, WRIT X, ADD+ X, SUB- X, MUL* X, DIV/ X, LADE X,"); WRITELN("STOR X, GOTO Y, GO.P Y, GO.0 Y, END. 0 ."); WRITELN; WRITELN("LAUT VEREINBARUNG KANN EIN PROGRAMM MAX. 50 BEFEHLE ENTHALTEN,"); WRITELN("ES STEHEN 20 DATENSPEICHERPLAETZE ZUR VERFUEGUNG ."); WRITELN("WERDEN DIESE GRENZEN UEBERSCHRITTEN, MUESSEN ZUVOR DIE"); WRITELN("KONSTANTEN P UND D ERHOEHT WERDEN ."); WRITELN("GEBEN SIE EIN PROGRAMM EIN !") END; BEGIN (*---HAUPTPROGRAMM---*) DIALOGTEXT; REPEAT PROGEINGABE; PROGAUSGABE; REPEAT RUN; WRITELN("WOLLEN SIE NEUE DATEN FUER DIESES PROGRAMM EINGEBEN (J/N) ?"); READLN;READ(ANTWORT) UNTIL ANTWORT="N"; WRITELN("WOLLEN SIE EIN NEUES PROGRAMM EINGEGEN (J/N) ?"); READLN;READ(ANTWORT) UNTIL ANTWORT="N"; END.



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search