File MIN.MW

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

PROGRAM MINI(INPUT,OUTPUT);
CONST   D=20;(*ANZAHL DER SPEICHER IM DS*)
        P=50;(*ANZAHL DER SPEICHER IM PS*)
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;
        MODUS:CHAR;
PROCEDURE STERN(D:CHAR);
VAR       I:INTEGER;
BEGIN
FOR I:=1 TO 60 DO WRITE(D);
WRITELN
END;
PROCEDUR EINFUERUNG;
BEGIN
  WRITELN;
  STERN("*");
  WRITELN;
  WRITELN("SIE BEFINDEN SICH NUN IM GRUNDZUSTAND.");
  WRITELN("SIE KOENNEN AUS DIESEM ZUSTAND IN DIE FOLGENDEN");
  WRITELN("ANDEREN EINTRETEN:");
  WRITELN;
  WRITELN("        PROGRAMMIER - MODUS     'R'");
  WRITELN("        EDITIER - MODUS         'E'");
  WRITELN("        PROGRAMM - START        'S'");
  WRITELN("        BEFEHLS - LISTE         'B'");
  WRITELN("        EINFUEHRUNG             'M'");
  WRITELN("        SIMULATIONS - ENDE      '.'");
  WRITELN;
  WRITELN("GEBEN SIE BITTE DIE JEWEILS HINTER DEN MODI");
  WRITELN("STEHENDEN BEFEHLE EIN, UM IN DEN GEWUENSCHTEN");
  WRITELN("MODUS EINZUTRETEN.");WRITELN;
  STERN("*")
  END;
PROCEDURE LISTE;
VAR       W:CHAR;
BEGIN
STERN("*");
WRITELN;
WRITELN("   LISTE DER ZUR VERFUEGUNG STEHENDEN BEFEHLE:");
WRITELN;
WRITELN("     READ D     EINLESEN EINER ZAHL");
WRITELN("     WRIT D     AUSGABE EINER ZAHL");
STERN("-");
WRITELN("     ADD+ D     AC:=<AC>+D");
WRITELN("     SUB- D     AC:=<AC>-D");
WRITELN("     MUL* D     AC:=<AC>*D");
WRITELN("     DIV/ D     AC:=<AC>/D");
STERN("-");
WRITELN("     LADE D     AC:=<D>");
WRITELN("     STOR D     D:=<AC>");
STERN("-");
WRITELN("     GOTO P     UNBEDINGTER SPRUNG NACH P");
WRITELN("     GO.0 P     BEDINGTER SPRUNG NACH P");
WRITELN("                WENNN <AC> => 0");
WRITELN("     GO.P P     BEDINGTER SPRUNG NACH P");
WRITELN("                WENN <AC> => 1");
STERN("-");
WRITELN("     END.       LETZTER BEFEHL");
WRITELN("                (AM ENDE JEDES PROGRAMMS)");
WRITELN;
STERN("*");
WRITELN;
WRITELN("DIE BEFEHLE VON 'MINI' BESTEHEN AUS EINEM");
WRITELN("BEFEHLSTEIL UND EINEM ADRESSTEIL.");
WRITELN("EINE ANWEISUNG VON 'MINI' IST ZUSAMMENGESTZT");
WRITELN("AUS EINEM BEFEHL MIT GENAU 4 ZEICHEN, EINER");
WRITELN("LEERSTELLE UND EINEM ADRESSTEIL AUS 2 ZEICHEN.");
WRITELN;
STERN("*");
WRITELN;
WRITELN("   WENN ES WEITERGEHEN KANN DANN GEBEN SIE EIN 'J' EIN.");
READLN;READ(W);
END;
PROCEDURE EINGABE;
VAR       W:CHAR;
          I:INTEGER;
PROCEDURE LESE(VAR A:WORT;VAR B,I:INTEGER);
VAR       J:INTEGER;
BEGIN
WRITE(I:2,". BEFEHL:");
READLN;FOR J:=1 TO 4DO READ(A[J]);READLN;READ (B);
END;
BEGIN
STERN("*");
WRITELN;
WRITELN("SIE BEFINDEN SICH JETZT IM EINGABEMODUS.");
WRITELN("ACHTEN SIE BEI DER EINGABE DES PROGRAMMS");
WRITELN("AUF DAS FORMAT DER ANWEISUMGEN!");
WRITELN;
STERN("*");
WRITELN;
WRITELN("WENN SIE ANFANGEN WOLLEN, DANN GEBEN SIE");
WRITELN("BITTE EIN 'J' EIN.");
WRITELN;
WRITELN("DIE EINGABE WIRD AUTOMATISCH MIT DEM 'END'");
WRITELN("-BEFEHL ABGECSLOSSEN, UND DAS PROGRAMM");
WRITELN("KEHRT AUTOMATISCH IN DEN GRUNDZUSTAND ZURUECK.");
READLN;READ(W);
I:=0;
REPEAT
  I:=I+1;
  LESE(PS.OP[I],PS.ADR[I],I);
  WRITELN;READLN
UNTIL PS.OP[I,4]=".";
WRITELN;
STERN("*");
END;
PROCEDURE EDIT;
BEGIN
WRITELN("P EDIT");
END;
PROCEDURE PSTART;
VAR       BR:BEFEHL;
          BZR,J:INTEGER;
          AC:REAL;
BEGIN
STERN("*");
WRITELN;
WRITELN("DAS VON IHNEN EINGEGEBENE PROGRAMM, WIRD");
WRITELN("JETZT GESTARTET.");
WRITELN;
STERN("*");
WRITELN;
BZR:=0;AC:=0;
REPEAT
  BZR:=BZR+1;
  BR.OP:=PS.OP[BZR];
  BR.ADR:=PS.ADR[BZR];
FOR J:=1 TO 4 DO WRITE(BR.OP[J]);
WRITELN;
WRITELN("BR.ADR:",BR.ADR,"  ,BZR:",BZR);
WRITELN;
  CASE BR.OP[4] OF
    "D"  :  BEGIN READLN;READ(DS[BR.ADR]) END;
    "T"  :  WRITELN(BR.ADR:5,"= ",DS[BR.ADR]);
    "+"  :  AC:=AC+DS[BR.ADR];
    "-"  :  AC:=AC-DS[BR.ADR];
    "*"  :  AC:=AC*DS[BR.ADR];
    "/"  :  AC:=AC/DS[BR.ADR];
    "E"  :  AC:=DS[BR.ADR];
    "R"  :  DS[BR.ADR]:=AC;
    "O"  :  BZR:=BR.ADR-1;
    "0"  :  IF AC=0 THEN BZR:=BR.ADR-1;
    "P"  :  IF AC>0 THEN BZR:=BR.ADR-1
    END;
UNTIL BR.OP[4]="."
END;
BEGIN   (* H A U P T P R O G R A M M *)
STERN("*");
WRITELN;
WRITELN("          M I N I  -  S I M U L A T I O N");
WRITELN;
STERN("*");
WRITELN;
WRITELN;
WRITELN("GEBEN SIE BITTE ZUERST EIN 'M' ZUR");
WRITELN("EINFUERUNG EIN!");
REPEAT
  WRITELN;
  WRITE("GEWUENSCHTER MODUS: ");READLN;READ(MODUS);
  CASE MODUS OF
    "R"   :   EINGABE;
    "E"   :   EDIT;
    "S"   :   PSTART;
    "B"   :   LISTE;
    "M"   :   EINFUERUNG;
    "."   :   WRITELN
  END
UNTIL MODUS=".";
STERN("*");
WRITELN;
WRITELN("     E N D E  DER  M I N I  -  S I M U L A T I O N ");
WRITELN;
STERN("*")
END.   (* H A U P T P R O G R A M M *)



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