Эх сурвалжийг харах

synchronized with original

Alexander Shiryaev 8 жил өмнө
parent
commit
8cc08b9871

+ 6 - 4
BlackBox/Po/Files/FPAdder.Lola.txt

@@ -1,4 +1,4 @@
-MODULE FPAdder(   (*NW  28.9.2015*)
+MODULE FPAdder(   (*NW  4.10.2016*)
   IN clk, run, u, v: BIT; x, y: WORD;
   OUT stall: BIT; z: WORD);
 
@@ -6,7 +6,7 @@ MODULE FPAdder(   (*NW  28.9.2015*)
     x3, y3, t3: [25] BIT;
     Sum: [27] BIT;
 
-  VAR xs, ys: BIT;  (*signs*)
+  VAR xs, ys, xn, yn: BIT;  (*signs, null*)
     xe, ye: [9] BIT;  (*exponents*)
     xm, ym: [25] BIT;  (*mantissas*)
 
@@ -26,9 +26,11 @@ BEGIN  (*unpack*)
   xs := x.31;
   xe := u -> 150'9 : {0'1, x[30:23]};
   xm := {(~u | x.23), x[22:0], 0'1};
+  xn := x[30:0] = 0;
   ys := y.31;
   ye := {0'1, y[30:23]};
   ym := {(~u & ~v), y[22:0], 0'1};
+  yn := y[30:0] = 0;
   dx := xe - ye; dy := ye - xe;
   e0 := dx.8 -> ye : xe;
   sx := dy.8 -> 0 : dy; sy := dx.8 -> 0 : dx;
@@ -93,7 +95,7 @@ BEGIN  (*unpack*)
   State := run -> State+1 : 0;
 
   z := v -> {Sum.26 ! 7, Sum[25:1]} :   (*FLOOR*)
-    x[30:0] = 0 -> (~u -> y : 0) :
-    y[30:0] = 0 -> x :
+    xn -> (u|yn -> 0 : y) :
+    yn -> x :
     (t3 = 0) | e1.8 -> 0 : {Sum.26, e1[7:0], t3[23:1]}
 END FPAdder.

+ 2 - 2
BlackBox/Po/Files/FPDivider.Lola.txt

@@ -1,4 +1,4 @@
-MODULE FPDivider(   (*NW 9.9.2016*)
+MODULE FPDivider(   (*NW 28.10.2016*)
   IN clk, run: BIT; x, y: WORD;
   OUT stall: BIT; z: WORD);
 
@@ -17,7 +17,7 @@ BEGIN
   sign := x.31 ^ y.31;   (*xor*)
   xe := x[30:23]; ye := y[30:23];
   e0 := {0'1, xe} - {0'1, ye};
-  e1 := e0 + 126 + Q.25;
+  e1 := e0 + 126 + {0'8, Q.25};
   stall := run & (S # 26);
 
   r0 := (S = 0) -> {1'2, x[22:0]} : {R, 0'1};

+ 2 - 2
BlackBox/Po/Files/FPMultiplier.Lola.txt

@@ -1,4 +1,4 @@
-MODULE FPMultiplier(   (*NW 15.9.2015*)
+MODULE FPMultiplier(   (*NW 28.10.2016*)
   IN clk, run: BIT; x, y: WORD;
   OUT stall: BIT; z: WORD);
 
@@ -14,7 +14,7 @@ MODULE FPMultiplier(   (*NW 15.9.2015*)
 BEGIN sign := x.31 ^ y.31;   (*xor*)
   xe := x[30:23]; ye := y[30:23];
   e0 := {0'1, xe} + {0'1, ye};
-  e1 := e0 - 127 + P.47;
+  e1 := e0 - 127 + {0'8, P.47};
   stall := run & (S # 25);
   w0 := P.0 -> {1'1, y[22:0]} : 0;
   w1 := {0'1, P[47:24]} + {0'1, w0};

+ 57 - 28
BlackBox/Po/Files/LSC.Mod.txt

@@ -1,14 +1,25 @@
-MODULE LSC;  (*Lola System Compiler, NW 8.1.95 / 18.9.2016 for RISC (LSCX)*)
+MODULE LSC;  (*Lola System Compiler, NW 8.1.95 / 28.10.2016*)
   IMPORT Texts, Oberon, LSB, LSS;
   
   VAR sym: INTEGER;
     err: BOOLEAN;  (*used at end of Unit*)
     top, bot, undef: LSB.Object;
-    factor: PROCEDURE (VAR x: LSB.Item);  (*to avoid forward references*)
-    expression: PROCEDURE (VAR x: LSB.Item);
-    Unit: PROCEDURE (VAR locals: LSB.Object);
     W: Texts.Writer;
 
+  PROCEDURE Out(n: INTEGER);
+  BEGIN Texts.Write(W, "\"); Texts.WriteInt(W, n, 4); Texts.Append(Oberon.Log, W.buf)
+  END Out;
+
+  PROCEDURE WrTyp(t: LSB.Type);
+  BEGIN 
+    IF t = LSB.integer THEN Texts.Write(W, "N"); Texts.WriteInt(W, t.size, 4)
+    ELSIF t = LSB.string THEN Texts.Write(W, "S"); Texts.WriteInt(W, t.size, 4)
+    ELSIF t = LSB.bitType THEN Texts.Write(W, "B")
+    ELSIF t IS LSB.ArrayType THEN Texts.Write(W, "A"); WrTyp(t(LSB.ArrayType).eltyp)
+    END ;
+    Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf)
+  END WrTyp;
+
   PROCEDURE Err(n: INTEGER);
   BEGIN LSS.Mark("type error"); Texts.WriteInt(W, n, 4);
     Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf)
@@ -31,7 +42,7 @@ MODULE LSC;  (*Lola System Compiler, NW 8.1.95 / 18.9.2016 for RISC (LSCX)*)
   BEGIN x := top;
     WHILE (x.next # bot) & (x.next.name # LSS.id) DO x := x.next END ;
     IF x.next = bot THEN
-      NEW(new); new.name := LSS.id; new.tag := class; new.next := bot; x.next := new
+      NEW(new); COPY(LSS.id, new.name); new.tag := class; new.next := bot; x.next := new
     ELSE LSS.Mark("mult def"); new := x
     END ;
     RETURN new
@@ -48,7 +59,7 @@ MODULE LSC;  (*Lola System Compiler, NW 8.1.95 / 18.9.2016 for RISC (LSCX)*)
   PROCEDURE CheckTypes(x, y, z: LSB.Item);  (*z.type = result type*)
     VAR xtyp, ytyp: LSB.Type;
   BEGIN xtyp := x.type; ytyp := y.type; z.type := xtyp; z.size := x.size; z.val := x.val;
-    IF xtyp = LSB.bitType THEN z.type := xtyp;
+    IF xtyp = LSB.bitType THEN 
       IF ytyp = LSB.integer THEN  (* b + 0 *)
         IF y.val >= 2 THEN Err(20); LSS.Mark("only 0 or 1") END
       ELSIF ytyp = LSB.string THEN (* b + {...} *) Err(21)
@@ -62,7 +73,7 @@ MODULE LSC;  (*Lola System Compiler, NW 8.1.95 / 18.9.2016 for RISC (LSCX)*)
           IF xtyp.size < Log(y.val) THEN Err(30) END
         ELSIF ytyp = LSB.string THEN   (*x + {...} *)
           IF xtyp.size # y.size THEN Err(31) END
-        ELSIF ytyp # LSB.bitType THEN Err(34)
+        ELSE Err(34)
         END
       ELSIF (ytyp IS LSB.ArrayType) & (xtyp(LSB.ArrayType).eltyp = ytyp(LSB.ArrayType).eltyp) THEN
         IF (xtyp.size # ytyp.size) THEN Err(40) END
@@ -91,6 +102,8 @@ MODULE LSC;  (*Lola System Compiler, NW 8.1.95 / 18.9.2016 for RISC (LSCX)*)
     END
   END CheckTypes;
 
+  PROCEDURE ^ expression(VAR x: LSB.Item);
+
   PROCEDURE selector(VAR x: LSB.Item);
     VAR y, z: LSB.Item; obj: LSB.Object;
       eltyp: LSB.Type; len, kind: LONGINT;
@@ -103,12 +116,14 @@ MODULE LSC;  (*Lola System Compiler, NW 8.1.95 / 18.9.2016 for RISC (LSCX)*)
           IF (y.tag = LSB.lit) & (z.tag = LSB.lit) THEN
             len := y.val - z.val + 1; y := New(LSB.range, y, z); x := New(LSB.sel, x, y); x.type := LSB.string; x.size := len
           END
-        ELSE kind := x.val; x := New(LSB.sel, x, y); x.type := eltyp; x.val := kind
+        ELSE x := New(LSB.sel, x, y); x.type := eltyp
         END ;
         IF sym = LSS.rbrak THEN LSS.Get(sym) ELSE LSS.Mark("rbrak ?") END
       ELSE (*sym = LSS.period*) LSS.Get(sym); factor(y);
         IF (y.tag = LSB.lit) & (y.val >= x.type.len) THEN LSS.Mark("too large") END ;
-        eltyp := x.type(LSB.ArrayType).eltyp; kind := x.val; x := New(LSB.sel, x, y); x.type := eltyp; x.val := kind
+        (*Texts.WriteString(W, "Sel"); Texts.WriteInt(W, x.tag, 4); Texts.WriteInt(W, x.val, 4);*)
+        eltyp := x.type(LSB.ArrayType).eltyp; kind := x.val; x := New(LSB.sel, x, y); x.type := eltyp; x.val := kind;
+        (*Texts.WriteInt(W, x.tag, 4); Texts.WriteInt(W, x.val, 4); Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf);*)
       END
     END
   END selector;
@@ -138,7 +153,7 @@ MODULE LSC;  (*Lola System Compiler, NW 8.1.95 / 18.9.2016 for RISC (LSCX)*)
     IF sym = LSS.rbrace THEN LSS.Get(sym) ELSE LSS.Mark("rbrace ?") END
   END constructor;
 
-  PROCEDURE factor0(VAR x: LSB.Item);
+  PROCEDURE factor(VAR x: LSB.Item);
     VAR obj: LSB.Object; y, z: LSB.Item;
       n, len: LONGINT; t: LSB.ArrayType;
   BEGIN
@@ -158,8 +173,7 @@ MODULE LSC;  (*Lola System Compiler, NW 8.1.95 / 18.9.2016 for RISC (LSCX)*)
           len := LSS.val; LSS.Get(sym);
           IF len < Log(x.val) THEN LSS.Mark("value too large") END
         ELSE LSS.Mark("integer ?"); len := 0
-        END ;
-        x.size := len
+        END
       ELSE len := 0
       END ;
       x.size := len
@@ -168,7 +182,7 @@ MODULE LSC;  (*Lola System Compiler, NW 8.1.95 / 18.9.2016 for RISC (LSCX)*)
     ELSIF sym = LSS.lbrace THEN LSS.Get(sym); constructor(x)
     ELSE LSS.Mark("bad factor")
     END
-  END factor0;
+  END factor;
 
   PROCEDURE term(VAR x: LSB.Item);
     VAR y, z: LSB.Item; op: INTEGER;
@@ -217,7 +231,7 @@ MODULE LSC;  (*Lola System Compiler, NW 8.1.95 / 18.9.2016 for RISC (LSCX)*)
     END
   END UncondExpression;
 
-  PROCEDURE expression0(VAR x: LSB.Item);
+  PROCEDURE expression(VAR x: LSB.Item);
     VAR y, z, w: LSB.Item;
   BEGIN UncondExpression(x);
     IF sym = LSS.then THEN
@@ -229,7 +243,12 @@ MODULE LSC;  (*Lola System Compiler, NW 8.1.95 / 18.9.2016 for RISC (LSCX)*)
       ELSE LSS.Mark("colon ?")
       END
     END
-  END expression0;
+  END expression;
+
+  PROCEDURE WritePars(fpar: LSB.Object; apar: LSB.Item);
+  BEGIN Texts.Write(W, 9X); Texts.WriteString(W, fpar.name); Texts.Write(W, "\");
+    IF apar IS LSB.Object THEN Texts.WriteString(W, apar(LSB.Object).name) END
+  END WritePars;
 
   PROCEDURE CheckAssign(x, y: LSB.Item);
     VAR xtyp, ytyp: LSB.Type;
@@ -257,15 +276,16 @@ MODULE LSC;  (*Lola System Compiler, NW 8.1.95 / 18.9.2016 for RISC (LSCX)*)
     VAR y, z: LSB.Item;
   BEGIN expression(y); apar := New(LSB.next, NIL, y); CheckAssign(fpar, y);
     IF fpar.val IN {3, 4} THEN  (*OUT or INOUT parameter*)
-      IF ~(y.tag IN {3, 7}) THEN  (*actual param is expression?*) LSS.Mark("bad actual param")
+      (* Texts.WriteString(W, "Param"); Texts.WriteInt(W, fpar.val, 4); Texts.WriteInt(W, y.val, 4); Texts.WriteInt(W, y.tag, 4); Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf); *)
+      IF (*y.tag # 3*) ~(y.tag IN {3, 7}) THEN  (*actual param is expression?*) LSS.Mark("bad actual param"); 
       ELSIF y.b = NIL THEN y.b := undef
       END
     END
   END Param;
 
   PROCEDURE Statement;
-    VAR x, y, z, apar, npar: LSB.Item;
-      unit: LSB.UnitType; fpar: LSB.Object;
+    VAR x, y, z, w, apar, npar: LSB.Item;
+    unit: LSB.UnitType; fpar: LSB.Object;
   BEGIN
     IF sym < LSS.ident THEN LSS.Mark("bad factor");
       REPEAT LSS.Get(sym) UNTIL sym >= LSS.ident
@@ -276,7 +296,7 @@ MODULE LSC;  (*Lola System Compiler, NW 8.1.95 / 18.9.2016 for RISC (LSCX)*)
         IF x.val >= 5 THEN LSS.Mark("assignment to read-only") END ;
         IF (x.b # NIL) & ~(x.type IS LSB.ArrayType) THEN LSS.Mark("mult assign") END ;
         expression(y); CheckAssign(z, y); x.b := y; (*tricky*)
-        IF z # x THEN x.a := z.b; x.val := 1 (*overwriting clk field x.a *) END
+        IF z # x THEN x.a := z.b; x.val := 1 (*overwriting clk field x.a with index*) END
       ELSIF sym = LSS.lparen THEN LSS.Get(sym);  (*unit instantiation*)
         IF x.type IS LSB.UnitType THEN
           unit := x.type(LSB.UnitType); fpar := unit.firstobj;
@@ -321,6 +341,9 @@ MODULE LSC;  (*Lola System Compiler, NW 8.1.95 / 18.9.2016 for RISC (LSCX)*)
   PROCEDURE StatSequence;
   BEGIN Statement;
     WHILE sym <= LSS.semicolon DO
+    (* IF sym = LSS.semicolon THEN LSS.Get(sym)
+      ELSIF sym < LSS.semicolon THEN LSS.Mark("semicolon missing?");
+      END ; *)
       IF sym < LSS.semicolon THEN LSS.Mark("semicolon missing?") END ;
       WHILE sym = LSS.semicolon DO LSS.Get(sym) END ;
       Statement
@@ -328,7 +351,7 @@ MODULE LSC;  (*Lola System Compiler, NW 8.1.95 / 18.9.2016 for RISC (LSCX)*)
     IF sym = LSS.end THEN LSS.Get(sym) ELSE LSS.Mark("END ?") END
   END StatSequence;
 
-  (*---------------------------------------------------*)
+  (*----------------------declarations-----------------------------*)
   
   (* for variables and registers,, obj.val has the meaning
     0  register
@@ -391,10 +414,10 @@ MODULE LSC;  (*Lola System Compiler, NW 8.1.95 / 18.9.2016 for RISC (LSCX)*)
     VAR first, new, obj: LSB.Object; type: LSB.Type;
   BEGIN obj := NIL;
     WHILE sym = LSS.ident DO
-      new := NewObj(LSB.var); new.name := LSS.id; new.val := kind; first := new; LSS.Get(sym);
+      new := NewObj(LSB.var); COPY(LSS.id, new.name); new.val := kind; first := new; LSS.Get(sym);
       IF sym = LSS.comma THEN LSS.Get(sym) ELSIF sym = LSS.ident THEN LSS.Mark("comma missing") END ;
       WHILE sym = LSS.ident DO
-        new := NewObj(LSB.var); new.name := LSS.id; new.val := kind; LSS.Get(sym);
+        new := NewObj(LSB.var); COPY(LSS.id, new.name); new.val := kind; LSS.Get(sym);
         IF sym = LSS.comma THEN LSS.Get(sym) ELSIF sym = LSS.ident THEN LSS.Mark("comma missing") END
       END ;
       IF sym = LSS.colon THEN
@@ -419,6 +442,13 @@ MODULE LSC;  (*Lola System Compiler, NW 8.1.95 / 18.9.2016 for RISC (LSCX)*)
     VarList(kind, NIL)
   END ParamList;
 
+  PROCEDURE List*;
+    VAR obj: LSB.Object;
+  BEGIN obj := top.next;
+    WHILE obj # NIL DO Texts.WriteString(W, obj.name); Texts.Write(W, "|"); obj := obj.next END ;
+    Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf)
+  END List;
+  
   PROCEDURE Traverse(x: LSB.Item);
   BEGIN
     IF x # NIL THEN
@@ -435,7 +465,7 @@ MODULE LSC;  (*Lola System Compiler, NW 8.1.95 / 18.9.2016 for RISC (LSCX)*)
     END
   END Traverse;
 
-  PROCEDURE Unit0(VAR locals: LSB.Object);
+  PROCEDURE Unit(VAR locals: LSB.Object);
     VAR obj, oldtop: LSB.Object; kind: INTEGER; clock: LSB.Item;
   BEGIN oldtop := top.next; top.next := LSB.root;  (*top is dummy*)
     IF sym = LSS.lparen THEN LSS.Get(sym) ELSE LSS.Mark("lparen ?") END ;
@@ -464,7 +494,7 @@ MODULE LSC;  (*Lola System Compiler, NW 8.1.95 / 18.9.2016 for RISC (LSCX)*)
           WHILE sym = LSS.ident DO VarList(kind, clock) END
         END
       END ;
-      locals := top.next;
+      List; locals := top.next;
       IF sym = LSS.begin THEN LSS.Get(sym); StatSequence END ;
       obj := locals; err := FALSE;  (*find unassigned variables*)
       WHILE obj # LSB.root DO
@@ -486,7 +516,7 @@ MODULE LSC;  (*Lola System Compiler, NW 8.1.95 / 18.9.2016 for RISC (LSCX)*)
     END ;
     IF err THEN Texts.Append(Oberon.Log, W.buf) END ;
     top.next := oldtop
-  END Unit0;
+  END Unit;
 
   PROCEDURE Module(T: Texts.Text; pos: LONGINT);
     VAR root: LSB.Object; modname: ARRAY 32 OF CHAR;
@@ -495,7 +525,7 @@ MODULE LSC;  (*Lola System Compiler, NW 8.1.95 / 18.9.2016 for RISC (LSCX)*)
     IF sym = LSS.module THEN
       LSS.Get(sym);
       IF sym = LSS.ident THEN
-        modname := LSS.id; Texts.WriteString(W, LSS.id); LSS.Get(sym);
+        COPY(LSS.id, modname); Texts.WriteString(W, LSS.id); LSS.Get(sym);
         Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf);
       ELSE LSS.Mark("ident ?")
       END ;
@@ -529,7 +559,6 @@ MODULE LSC;  (*Lola System Compiler, NW 8.1.95 / 18.9.2016 for RISC (LSCX)*)
   END Compile;
 
 BEGIN Texts.OpenWriter(W);
-  Texts.WriteString(W, "Lola compiler; NW 18.9.2016"); Texts.WriteLn(W);
-  factor := factor0; expression := expression0; Unit := Unit0;
+  Texts.WriteString(W, "Lola compiler; NW 28.10.20165"); Texts.WriteLn(W);
   NEW(top); bot := LSB.root; NEW(undef); undef.tag := 2; undef.type := LSB.bitType
 END LSC.

+ 3 - 3
BlackBox/Po/Files/ORP.Mod.txt

@@ -1,4 +1,4 @@
-MODULE ORP; (*N. Wirth 1.7.97 / 17.9.2016  Oberon compiler for RISC in Oberon-07*)
+MODULE ORP; (*N. Wirth 1.7.97 / 17.10.2016  Oberon compiler for RISC in Oberon-07*)
   IMPORT Texts, Oberon, ORS, ORB, ORG;
   (*Author: Niklaus Wirth, 2014.
     Parser of Oberon-RISC compiler. Uses Scanner ORS to obtain symbols (tokens),
@@ -699,7 +699,6 @@ MODULE ORP; (*N. Wirth 1.7.97 / 17.9.2016  Oberon compiler for RISC in Oberon-07
         WHILE sym = ORS.semicolon DO ORS.Get(sym); FPSection(size, nofpar) END ;
         Check(ORS.rparen, "no )")
       END ;
-      ptype.nofpar := nofpar; parblksize := size;
       IF sym = ORS.colon THEN  (*function*)
         ORS.Get(sym);
         IF sym = ORS.ident THEN
@@ -710,7 +709,8 @@ MODULE ORP; (*N. Wirth 1.7.97 / 17.9.2016  Oberon compiler for RISC in Oberon-07
         ELSE ORS.Mark("type identifier expected")
         END
       END
-    END
+    END ;
+    ptype.nofpar := nofpar; parblksize := size
   END ProcedureType;
 
   PROCEDURE FormalType0(VAR typ: ORB.Type; dim: INTEGER);

+ 10 - 8
BlackBox/Po/Files/RISC5.Lola.txt

@@ -1,4 +1,4 @@
-MODULE RISC5 (IN clk, rst, stallX: BIT;  (*NW 18.9.2016*)
+MODULE RISC5 (IN clk, rst, stallX: BIT;  (*NW 28.10.2016*)
   IN inbus, codebus: WORD;
   OUT adr: [24] BIT;
     rd, wr, ben: BIT;
@@ -53,9 +53,10 @@ MODULE RISC5 (IN clk, rst, stallX: BIT;  (*NW 18.9.2016*)
     cc: [3] BIT;
     imm: [16] BIT;
     off: [20] BIT;
-    offL: [24] BIT;
+    disp: [22] BIT;
 
-    regwr, stall, stallL, stallM, stallD, stallFA, stallFM, stallFD: BIT;
+    regwr, ccwr: BIT;
+    stall, stallL, stallM, stallD, stallFA, stallFM, stallFD: BIT;
     sc1, sc0: [2] BIT;  (*shift counts*)
 
     a0, a1, a2, a3: BIT;
@@ -92,7 +93,7 @@ BEGIN PM(clk, pcmux[8:0], pmout);
   irc := ins[3:0];
   imm := ins[15:0];  (*reg instr*)
   off := ins[19:0];    (*mem instr*)
-  offL := ins[23:0];  (*branch instr*)
+  disp := ins[21:0];  (*branch instr*)
 
   Add := ~p & (op = 8);
   Sub := ~p & (op = 9);
@@ -112,7 +113,7 @@ BEGIN PM(clk, pcmux[8:0], pmout);
   C0 := R[irc];
   C1 := q -> {v!16, imm} : C0 ;
   ira0 := Br -> 15'4 : ira;
-  adr := stallL -> B[23:0] + {off.19!4, off} : {pcmux, 0'2};
+  adr := stallL -> B[23:0] + {off.19 ! 4, off} : {pcmux, 0'2};
   rd := Ldr & ~stallX & ~stall1;
   wr := Str & ~stallX & ~stall1;
   ben := p & ~q & v & ~stallX & ~stall1; (*byte enable*)
@@ -153,13 +154,14 @@ BEGIN PM(clk, pcmux[8:0], pmout);
           (~op.0 -> B | C1 : B ^ C1)) ):   (*Ior, Xor*)
       (~op.2 ->
         (~op.1 ->
-          (~op.0 -> B + C + (u&C) : B - C1 - (u&C)) :   (*Add, Sub*)
+          (~op.0 -> B + C1 + {0'31, (u&C)} : B - C1 - {0'31, (u&C)}) :   (*Add, Sub*)
           (~op.0 -> product[31:0] : quotient)) :       (*Mul, Div*)
         (~op.1 ->
           fsum :     (*Fad, Fsb*)
           (~op.0 -> fprod : fquot))) ;  (*Fml, Fdv*)
 
-  regwr := ~p & ~stall | (Ldr & ~stallX & ~stall1) | (Br & cond & v & ~stallX);
+  ccwr := ~p & ~stall | (Ldr & ~stallX & ~stall1);
+  regwr := ccwr | (Br & cond & v & ~stallX);
   a0 := ~adr.1 & ~adr.0;
   a1 := ~adr.1 & adr.0;
   a2 := adr.1 & ~adr.0;
@@ -188,7 +190,7 @@ BEGIN PM(clk, pcmux[8:0], pmout);
       (cc = 7));
   pcmux := ~rst -> 3FF800H'22 :
     stall -> PC :
-    (Br & cond & u) -> offL[21:0]  + nxpc :
+    (Br & cond & u) -> disp + nxpc :
     (Br & cond & ~u) -> C0[23:2] : nxpc;
 
   sa := aluRes.31;

+ 2 - 2
BlackBox/Po/Files/RISC5Top.Lola.txt

@@ -1,4 +1,4 @@
-MODULE RISC5Top(   (*NW 23.9.2015*)
+MODULE RISC5Top(   (*NW 28.10.2016*)
   IN CLK50M: BIT;
   IN btn: [4] BIT;
   IN swi: BYTE;
@@ -153,7 +153,7 @@ BEGIN
   gpout := ~rst -> 0 : (wr & ioenb & (iowadr = 8)) -> outbus[7:0] : gpout;
   gpoc := ~rst -> 0 : (wr & ioenb & (iowadr = 9)) -> outbus[7:0] : gpoc;
   cnt0 := limit -> 0 : cnt0 + 1;
-  cnt1 := cnt1 + limit;
+  cnt1 := cnt1 + {0'31, limit};
 
   clk := ~clk  (* @ 50 MHz *)
 END RISC5Top.

BIN
BlackBox/Po/Mod/LSC3.odc


BIN
BlackBox/Po/Mod/ORP.odc


BIN
BlackBox/Po/Mod/ORP3.odc