[Oberon] Standalone BootLoader format
    Tomas Kral 
    thomas.kral at email.cz
       
    Tue May 12 16:31:54 CEST 2020
    
    
  
>    2   00000000  MOV  R0  R0  R0       ; code[2], ADR(code[2]) =
> ADR(x)
Apologies, this not clear. As in the code and assembly I can see.
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.
   0     E7000007       B       7
   1     00000000       is this SB addr 0?
   2     00000000
   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
...
If more VARs added, e.g. 
VAR x, y, z, a, b, c: INTEGER;
a := 0; b := 0; c := 0;
Compiled, and then, there is still only 7 words to branch over???
I have also though that those 7 words are to do with boot area limits
set by BootLoader at boot time.
See PO2013 Applications, page 74.
Quite confused, can you please explain?
Many thanks
-- 
Tomas Kral <thomas.kral at email.cz>
    
    
More information about the Oberon
mailing list