[Oberon] PO2013 - Infrequent TRAPs

Tomas Kral thomas.kral at email.cz
Sun Jun 14 09:58:18 CEST 2020

> 1. from initial boot time and
> 2. on a system which uses all the latest code from the
> www.projectoberon.com site and
> 3. which doesn't include any of your modifications to the latest code
> that reliably reproduces any of these problems? 

Hi Chris,

I see, distinguish between latest source with
or without my own mods. Is difficult to reproduce as it happens at
random, on some occasions. I run minimal PO2013 FPGA system with 1MB.

Is unlikely to happen on emulated systems, with megs of RAM.

Also I admit, is usually me doing something wrong, but particularly trap with heap and other emntioned eralier became a wee bit persistent.

2016 ORB version, very very rarely does trap on heap.

< MODULE ORB;   (*NW 25.6.2014  / 4.4.2017  in Oberon-07*)
> MODULE ORB;   (*NW 25.6.2014  / 17.9.2016  in Oberon-07*)
<       class*, exno*: BYTE;
>       class*, lev*, exno*: INTEGER;
<       lev*: INTEGER;

My mods in modules same as in official release, except bottom-up search in modules stack, pls see comment.

MODULE Modules;  (*Link and load on RISC; NW 20.10.2013 / 9.4.2016*)

 IF res = 0 THEN (*search for a hole in the list*)
        INC(size, DescSize); (*mod*) m := root; mod := NIL;
        (*WHILE (mod # NIL) & ~((mod.name[0] = 0X) & (mod.size >= size)) DO mod := mod.next END ;*)
        WHILE m # NIL DO IF (m.name[0] = 0X) & (m.size >= size) THEN
        mod := m END ; m := m.next END ;

MODULE Kernel;  (*NW/PR  11.4.86 / 27.12.95 / 4.2.2014*)
(* ---------- New: heap allocation ----------*)

    (*len is multiple of 256*)

I have some understanding how heap works, we maintain
three  `list1 := 0; list2 := 0; list3 := 0; list0 := heapOrg;' distinct lists.

32/64/128/[multi]256 bytes blocks, each with hidden type tag (two addresses Mk/Tag, two INTs = 8 bytes). Allocated by a trap through ORB, aligned on words. (or is it aligned?)

Tomas Kral <thomas.kral at email.cz>

More information about the Oberon mailing list