[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