Task details. #### This needs a lot of work.
: .TSK ( task --)
@ ( address of task table)
DUP @ ( task_table_addr status_addr <-)
CR
DUP ." user_base: " .h
DUP [ (S) user_base - ]T LITERAL + @ ( task_table status stack (--)
DUP @ ( old I ) ." I: " .h
DUP 4 + @ ( return top) DUP ." R: " .h
( task_table status stack ret (--)
( print return stack)
CR ." return_stack"
jump ( status) OVER - 4 / zero ?DO
CR DUP I 4* + DUP .h SPACE @ .h
LOOP DROP
( jump task_table status stack (--)
CR ." system_stack"
8 + ( saved R and I )
\ jump _#task_table_s0 +
( jump task_table status stack+8 base )
OVER - 4 / zero ?DO
CR DUP I 4* + DUP .h SPACE @ .h
LOOP DROP ( stack)
( jump task_table status (--)
2DROP
send
;
Print out the current buffer structure, for what is all means see the file heap_control.html.
: .buffers ( --)
CR
BASE @ >R
HEX
." Size Free Used" CR
_#sys_buffer_list_number CELLS zero DO
I _#buffer_sizes + @ 8 .R
2 SPACES
I _sys_buffer_list_free + _number_in_list 8 .R
2 SPACES
I _sys_buffer_list_used + _number_in_list 8 .R
CR
4 +LOOP
R> BASE !
send
;
Print out details of the buffers used.
: .buffers_used
CR
BASE @ >R
HEX
." Address Size Task Word" CR
_#sys_buffer_list_number CELLS zero DO
I _sys_buffer_list_used + @
BEGIN
DUP
WHILE
DUP [ _#sys_buffer_user _#sys_buffer_used_link - ]T LITERAL +
8 .R 2 SPACES
DUP [ _#sys_buffer_size_code _#sys_buffer_used_link - ]T LITERAL + @ I <> IF
." Rubbish"
DROP zero
ELSE
2 SPACES
I _#buffer_sizes + @ 8 .R 2 SPACES
DUP [ _#sys_buffer_task _#sys_buffer_used_link - ]T LITERAL + @
8 .R ( #### .task when written)
2 SPACES
DUP [ _#sys_buffer_ip _#sys_buffer_used_link - ]T LITERAL + @
8 .R ( #### ?.head when written)
@
THEN
CR
REPEAT
DROP
4 +LOOP
R> BASE !
send
;
Print out details of objects created from the heap; I think this is quite neat. It is also a good reason to use objects when allocating heap areas.
: .objects { }{
variable %heading_done }
_#sys_buffer_list_number CELLS zero DO
FALSE %heading_done !
I _sys_buffer_list_used + @
BEGIN
DUP
WHILE
DUP [ _#sys_buffer_ip _#sys_buffer_used_link - ]T LITERAL + @
[ ' heap_object ]T LITERAL = IF
%heading_done @ not IF
CR
." ------Buffer_size-----> " I _#buffer_sizes + @ .h
CR
TRUE %heading_done !
THEN
zero OVER [ _#sys_buffer_user _#sys_buffer_used_link - ]T LITERAL + :print
CR
THEN
@
REPEAT
DROP
4 +LOOP
send
;
( free memory print) HEX
: .free ( --)
CR ." Dictionary : " _'h_task_top @ HERE - 9 .R
CR ." Ram : " _'ram_top @ ram_here - 9 .R
CR ." Fast ram : " _'fast_top @ fast_here - 9 .R
CR
send
;