Added some comment
This commit is contained in:
parent
750c838141
commit
987683cf99
7 changed files with 49 additions and 9 deletions
|
@ -103,7 +103,7 @@
|
||||||
lol 0
|
lol 0
|
||||||
cmu EM_WSIZE
|
cmu EM_WSIZE
|
||||||
zge *1
|
zge *1
|
||||||
loc M2_UOVFL
|
loc M2_UUVFL
|
||||||
trp
|
trp
|
||||||
1
|
1
|
||||||
lol EM_WSIZE
|
lol EM_WSIZE
|
||||||
|
@ -119,7 +119,7 @@
|
||||||
ldl 0
|
ldl 0
|
||||||
cmu EM_LSIZE
|
cmu EM_LSIZE
|
||||||
zge *1
|
zge *1
|
||||||
loc M2_UOVFL
|
loc M2_UUVFL
|
||||||
trp
|
trp
|
||||||
1
|
1
|
||||||
ldl EM_LSIZE
|
ldl EM_LSIZE
|
||||||
|
|
|
@ -73,13 +73,16 @@
|
||||||
; SIG is called with one parameter:
|
; SIG is called with one parameter:
|
||||||
; - procedure instance identifier (PROC)
|
; - procedure instance identifier (PROC)
|
||||||
; and returns the old traphandler.
|
; and returns the old traphandler.
|
||||||
; only the procedure identifier inside the PROC is used.
|
|
||||||
|
|
||||||
|
exa _handler
|
||||||
exp $SIG
|
exp $SIG
|
||||||
pro $SIG, 0
|
pro $SIG, 0
|
||||||
|
lae _handler
|
||||||
|
loi EM_PSIZE
|
||||||
lal PROC
|
lal PROC
|
||||||
loi EM_PSIZE
|
loi EM_PSIZE
|
||||||
sig
|
lae _handler
|
||||||
|
sti EM_PSIZE
|
||||||
ret EM_PSIZE
|
ret EM_PSIZE
|
||||||
end ?
|
end ?
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,12 @@ DEFINITION MODULE Storage;
|
||||||
Version: $Header$
|
Version: $Header$
|
||||||
*)
|
*)
|
||||||
|
|
||||||
|
(*
|
||||||
|
Wirth's 3rd edition certainly is confusing: mostly it uses Allocate, but
|
||||||
|
the module at the end of the book defines ALLOCATE. To avoid problems,
|
||||||
|
I included them both.
|
||||||
|
*)
|
||||||
|
|
||||||
FROM SYSTEM IMPORT ADDRESS;
|
FROM SYSTEM IMPORT ADDRESS;
|
||||||
|
|
||||||
PROCEDURE ALLOCATE(VAR a : ADDRESS; size : CARDINAL);
|
PROCEDURE ALLOCATE(VAR a : ADDRESS; size : CARDINAL);
|
||||||
|
@ -13,11 +19,17 @@ DEFINITION MODULE Storage;
|
||||||
killed.
|
killed.
|
||||||
*)
|
*)
|
||||||
|
|
||||||
|
PROCEDURE Allocate(VAR a : ADDRESS; size : CARDINAL);
|
||||||
|
(* Identical to ALLOCATE *)
|
||||||
|
|
||||||
PROCEDURE DEALLOCATE(VAR a : ADDRESS; size : CARDINAL);
|
PROCEDURE DEALLOCATE(VAR a : ADDRESS; size : CARDINAL);
|
||||||
(* Free the area at address "a" with the given size. The area
|
(* Free the area at address "a" with the given size. The area
|
||||||
must have been allocated by "ALLOCATE", with the same size.
|
must have been allocated by "ALLOCATE", with the same size.
|
||||||
*)
|
*)
|
||||||
|
|
||||||
|
PROCEDURE Deallocate(VAR a : ADDRESS; size : CARDINAL);
|
||||||
|
(* Identical to DEALLOCATE *)
|
||||||
|
|
||||||
PROCEDURE Available(size : CARDINAL) : BOOLEAN;
|
PROCEDURE Available(size : CARDINAL) : BOOLEAN;
|
||||||
(* Return TRUE if an area with the given size could be allocated.
|
(* Return TRUE if an area with the given size could be allocated.
|
||||||
*)
|
*)
|
||||||
|
|
|
@ -52,7 +52,7 @@ IMPLEMENTATION MODULE Storage;
|
||||||
Compacted: BOOLEAN; (* avoid recursive reorganization *)
|
Compacted: BOOLEAN; (* avoid recursive reorganization *)
|
||||||
FirstBlock: BucketPtr;
|
FirstBlock: BucketPtr;
|
||||||
|
|
||||||
PROCEDURE Allocate(size: CARDINAL) : ADDRESS;
|
PROCEDURE MyAllocate(size: CARDINAL) : ADDRESS;
|
||||||
VAR nu : INTEGER;
|
VAR nu : INTEGER;
|
||||||
b : INTEGER;
|
b : INTEGER;
|
||||||
p, q: BucketPtr;
|
p, q: BucketPtr;
|
||||||
|
@ -141,7 +141,7 @@ IMPLEMENTATION MODULE Storage;
|
||||||
IF brk = ILLBREAK THEN
|
IF brk = ILLBREAK THEN
|
||||||
ReOrganize();
|
ReOrganize();
|
||||||
Compacted := TRUE;
|
Compacted := TRUE;
|
||||||
brk := Allocate(size);
|
brk := MyAllocate(size);
|
||||||
Compacted := FALSE;
|
Compacted := FALSE;
|
||||||
RETURN brk;
|
RETURN brk;
|
||||||
END;
|
END;
|
||||||
|
@ -150,11 +150,16 @@ IMPLEMENTATION MODULE Storage;
|
||||||
p^.BSIZE := nu;
|
p^.BSIZE := nu;
|
||||||
p^.BNEXT := USED;
|
p^.BNEXT := USED;
|
||||||
RETURN ADR(p^.BSTORE);
|
RETURN ADR(p^.BSTORE);
|
||||||
|
END MyAllocate;
|
||||||
|
|
||||||
|
PROCEDURE Allocate(VAR a: ADDRESS; size: CARDINAL);
|
||||||
|
BEGIN
|
||||||
|
ALLOCATE(a, size);
|
||||||
END Allocate;
|
END Allocate;
|
||||||
|
|
||||||
PROCEDURE ALLOCATE(VAR a: ADDRESS; size: CARDINAL);
|
PROCEDURE ALLOCATE(VAR a: ADDRESS; size: CARDINAL);
|
||||||
BEGIN
|
BEGIN
|
||||||
a := Allocate(size);
|
a := MyAllocate(size);
|
||||||
IF a = NIL THEN
|
IF a = NIL THEN
|
||||||
Message("out of core");
|
Message("out of core");
|
||||||
HALT;
|
HALT;
|
||||||
|
@ -164,7 +169,7 @@ IMPLEMENTATION MODULE Storage;
|
||||||
PROCEDURE Available(size: CARDINAL): BOOLEAN;
|
PROCEDURE Available(size: CARDINAL): BOOLEAN;
|
||||||
VAR a: ADDRESS;
|
VAR a: ADDRESS;
|
||||||
BEGIN
|
BEGIN
|
||||||
a:= Allocate(size);
|
a:= MyAllocate(size);
|
||||||
IF a # NIL THEN
|
IF a # NIL THEN
|
||||||
DEALLOCATE(a, size);
|
DEALLOCATE(a, size);
|
||||||
RETURN TRUE;
|
RETURN TRUE;
|
||||||
|
@ -172,6 +177,11 @@ IMPLEMENTATION MODULE Storage;
|
||||||
RETURN FALSE;
|
RETURN FALSE;
|
||||||
END Available;
|
END Available;
|
||||||
|
|
||||||
|
PROCEDURE Deallocate(VAR a: ADDRESS; size: CARDINAL);
|
||||||
|
BEGIN
|
||||||
|
DEALLOCATE(a, size);
|
||||||
|
END Deallocate;
|
||||||
|
|
||||||
PROCEDURE DEALLOCATE(VAR a: ADDRESS; size: CARDINAL);
|
PROCEDURE DEALLOCATE(VAR a: ADDRESS; size: CARDINAL);
|
||||||
VAR p: BucketPtr;
|
VAR p: BucketPtr;
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
|
@ -15,6 +15,7 @@ DEFINITION MODULE Traps;
|
||||||
ERRFORLOOP = 68; (* value of FOR-loop control variable changed
|
ERRFORLOOP = 68; (* value of FOR-loop control variable changed
|
||||||
in loop
|
in loop
|
||||||
*)
|
*)
|
||||||
|
ERRCARDUVFL = 69; (* CARDINAL underflow *)
|
||||||
|
|
||||||
TYPE TrapHandler = EM.TrapHandler;
|
TYPE TrapHandler = EM.TrapHandler;
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,7 @@ static struct errm {
|
||||||
{ M2_NORESULT, "no RETURN from procedure function"},
|
{ M2_NORESULT, "no RETURN from procedure function"},
|
||||||
{ M2_UOVFL, "cardinal overflow"},
|
{ M2_UOVFL, "cardinal overflow"},
|
||||||
{ M2_FORCH, "Warning: FOR-loop control variable was changed in the body"},
|
{ M2_FORCH, "Warning: FOR-loop control variable was changed in the body"},
|
||||||
|
{ M2_UUVFL, "cardinal underflow"},
|
||||||
{ -1, 0}
|
{ -1, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
|
|
||||||
#define STACKSIZE 2048 /* maximum stack size for a coroutine */
|
#define STACKSIZE 2048 /* maximum stack size for a coroutine */
|
||||||
|
|
||||||
|
exa _handler
|
||||||
exa _environ
|
exa _environ
|
||||||
exa _argv
|
exa _argv
|
||||||
exa _argc
|
exa _argc
|
||||||
|
@ -23,6 +24,8 @@
|
||||||
exa _StackSize
|
exa _StackSize
|
||||||
exp $_catch
|
exp $_catch
|
||||||
|
|
||||||
|
_handler
|
||||||
|
bss EM_PSIZE,0,0
|
||||||
_environ
|
_environ
|
||||||
bss EM_PSIZE,0,0
|
bss EM_PSIZE,0,0
|
||||||
_argv
|
_argv
|
||||||
|
@ -42,6 +45,16 @@ _StackSize
|
||||||
mainroutine
|
mainroutine
|
||||||
bss 2*EM_PSIZE,0,0
|
bss 2*EM_PSIZE,0,0
|
||||||
|
|
||||||
|
inp $trap_handler
|
||||||
|
pro $trap_handler,0
|
||||||
|
lol 0 ; trap number
|
||||||
|
lae _handler
|
||||||
|
loi EM_PSIZE
|
||||||
|
cai
|
||||||
|
asp EM_WSIZE
|
||||||
|
rtt
|
||||||
|
end 0
|
||||||
|
|
||||||
exp $m_a_i_n
|
exp $m_a_i_n
|
||||||
pro $m_a_i_n, STACKSIZE
|
pro $m_a_i_n, STACKSIZE
|
||||||
|
|
||||||
|
@ -78,7 +91,7 @@ mainroutine
|
||||||
lol 0
|
lol 0
|
||||||
ste _argc ; save argument count
|
ste _argc ; save argument count
|
||||||
|
|
||||||
lpi $_catch
|
lpi $trap_handler
|
||||||
sig
|
sig
|
||||||
asp EM_PSIZE
|
asp EM_PSIZE
|
||||||
cal $_M2M
|
cal $_M2M
|
||||||
|
|
Loading…
Add table
Reference in a new issue