File SIMUL2.MI

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

PROGRAM MINISIMULATION (IN,OUT);
CONST P=50; D=20;    (*CREATED BY MARKUS ISING SEP/25. 1984*)
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
 READLN;
 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," OPERATIONSTEIL");
  LESE;WRITE("  ADRESSTEIL");READLN;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("ZUR KONTROLLE,");
 WRITELN("DER PROGRAMMSPEICHER ENTHAELT FOLGENDES PROGRAMM:");
 REPEAT
   I:=I+1;WRITE(I:3,"   ");
   SCHREIBE;WRITELN("  ",PS.ADR[I]:3)
 UNTIL PS.OP[I][4]=".";WRITELN;
 END;
     
PROCEDURE RUN;
VAR BZR,Z: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,J:INTEGER;
 BEGIN
 FOR J:=1 TO 50 DO WRITE("*");WRITELN;
 WRITELN(BZR:3,". PROGRAMMBEFEHL:");
 WRITE("     OPERATIONSTEIL:");FOR I:=1 TO 4 DO WRITE(BR.OP[I]);
 WRITE(" ,  ADRESSTEIL:",BR.ADR:3);WRITELN;FOR J:=10 TO 50 DO WRITE("_");
 WRITELN;
 END;
BEGIN    (*-----RUN-----*)
BZR:=0;Z:=0;
REPEAT
  BZR:=BZR+1;Z:=Z+1;
  BEFEHLHOLEN(BZR);WRITE(Z:2 ," "); PROGSCHRITT;
  IF BR.OP[1]="I" THEN BR.ADR:=TRUNC(DS[BR.ADR]);  (*IND. ADRESSIERUNG*)
  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;
  ".":WRITELN;
  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;
 WRITELN("DRUECKEN SIE 'RETURN' UND 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<>"J";
  WRITELN("WOLLEN SIE EIN NEUES PROGRAMM EINGEGEN (J/N) ?");
  READLN;READ(ANTWORT)
UNTIL ANTWORT<>"J";
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