\ ***************************************************************************** \ * Copyright (c) 2004, 2008 IBM Corporation \ * All rights reserved. \ * This program and the accompanying materials \ * are made available under the terms of the BSD License \ * which accompanies this distribution, and is available at \ * http://www.opensource.org/licenses/bsd-license.php \ * \ * Contributors: \ * IBM Corporation - initial implementation \ ****************************************************************************/ \ Create debug section in NVRAM : debug-init-nvram ( -- ) nvram-partition-type-debug get-nvram-partition IF cr ." Could not find debug partition in NVRAM - " nvram-partition-type-debug s" debug" d# 1024 new-nvram-partition ABORT" Failed to create DEBUG NVRAM partition" 2dup erase-nvram-partition drop ." created." cr THEN s" debug-nvram-partition" $2constant ; debug-init-nvram : debug-add-env ( "name" "value" -- ) debug-nvram-partition 2rot 2rot internal-add-env drop ; : debug-set-env ( "name" "value" -- ) debug-nvram-partition 2rot 2rot internal-set-env drop ; : debug-get-env ( "name" -- "value" TRUE | FALSE) debug-nvram-partition 2swap internal-get-env ; : debug-get-history-enabled ( -- n ) s" history-enabled?" debug-get-env IF $number IF 0 THEN ELSE 0 THEN ; : debug-set-history-enabled ( n -- ) (.) s" history-enabled?" 2swap debug-set-env ; debug-get-history-enabled constant nvram-history? nvram-history? [IF] : history-init-nvram ( -- ) nvram-partition-type-history get-nvram-partition IF cr ." Could not find history partition in NVRAM - " nvram-partition-type-history s" history" d# 2048 new-nvram-partition ABORT" Failed to create SMS NVRAM partition" 2dup erase-nvram-partition drop ." created" cr THEN s" history-nvram-partition" $2constant ; history-init-nvram 0 value (history-len) 0 value (history-adr) : (history-load-one) ( str len -- len ) \ 2dup ." loading " type cr to (history-len) to (history-adr) /his (history-len) + alloc-mem ( his ) his-tail 0= IF dup to his-tail THEN his-head over his>next ! to his-head his-head his>next @ his>prev his-head swap ! (history-len) his-head his>len ! (history-adr) his-head his>buf (history-len) move (history-len) 1+ ; : history-load ( -- ) history-nvram-partition drop BEGIN dup WHILE dup rzcount ( part str len ) dup IF (history-load-one) + ELSE 3drop 0 THEN REPEAT drop ; : (history-store-one) ( pos len saddr slen -- FALSE | npos nlen TRUE ) dup 3 pick < IF \ enough space dup >r rot >r \ 2dup ." storing " type cr bounds DO dup i c@ swap nvram-c! 1+ LOOP dup 0 swap nvram-c! 1+ r> r> - 1- true ELSE 2drop false THEN ; : history-store ( -- ) history-nvram-partition erase-nvram-partition drop history-nvram-partition his-tail BEGIN dup WHILE dup his>buf over his>len @ ( position len link saddr slen ) rot >r (history-store-one) r> swap IF his>prev @ ELSE drop 0 THEN REPEAT 2drop drop ; \ redefine "end of SLOF" words to safe history : reset-all history-store reset-all ; : reboot history-store reboot ; : boot history-store boot ; [THEN]