[Oberon] Standalone BootLoader format

Tomas Kral thomas.kral at email.cz
Tue May 12 19:02:04 CEST 2020


Hi Andreas,

Still not any wiser.
Just updating comments.

(* Standalone module booted over serial, with BRAM loader *)
MODULE* Counter;
  VAR x, y, z: INTEGER;
BEGIN LED(1); z := 0;
  REPEAT LED(z); x := 1000;
     REPEAT y := 1000;
       REPEAT y := y-1 UNTIL y = 0;
       x := x-1
     UNTIL x = 0;
     z := z+1
   UNTIL FALSE
END Counter.

(* B, Branch to (PC+offset+1) *)
   0     E7000007       B       7, VAR y (branch overwritten by code) 
   1     00000000       VAR x
   2     00000000       VAR z 
   3     00000000
   4     00000000
   5     00000000
   6     00000000
   7     00000000
(* Static base SB points to addr 0 *)
   8     4D000000       MOV SB  R0      0
   9     5E00FFC0       MOV SP  R0    -64
(* LED(1), mem[-60] := 1*)
  10     40000001       MOV  R0  R0      1
  11     5100FFC4       MOV  R1  R0    -60
  12     A0100000       STR   R0  R1       0
(* z := 0, mem[SB+8] := R0 *)
  13     40000000       MOV  R0  R0      0
  14     A0D00008       STR   R0 SB       8
...
(* y := 1000, mem[SB+0] := R0 *)
  18     400003E8       MOV  R0  R0   1000
  19     A0D00000       STR   R0 SB       0
(* x := 1000, mem[SB+4] := R0 *)
  20     400003E8       MOV  R0  R0   1000
  21     A0D00004       STR   R0 SB       4
...

Do these 7 words' gap map over these limits below, set by the BRAM
loader?
 0 A branch instruction to the initialising body of module Modules
12 The limit of available memory
16 The address of the end of the module space loaded
20 The current root of the links of loaded modules
24 The current limit of the module area

Loader code as per `BootLoad.Mod'

 PROCEDURE LoadFromLine;
    VAR len, adr, dat: INTEGER;
  BEGIN RecInt(len);
    WHILE len > 0 DO
      RecInt(adr);
      REPEAT RecInt(dat); SYSTEM.PUT(adr, dat); adr := adr + 4; len :=
 len - 4 U NTIL len = 0;
      RecInt(len)
    END
  END LoadFromLine;

Where address adr is set to 0.

Tomas

-- 
Tomas Kral <thomas.kral at email.cz>


More information about the Oberon mailing list