diff options
| author | Keith Packard <keithp@keithp.com> | 2016-11-11 23:34:54 -0800 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2017-02-20 11:16:50 -0800 | 
| commit | 33aeffc123af1f9063969acf585f1caac885ced4 (patch) | |
| tree | bf4f87c83c46ce815070933b947ba27fa65724c8 /src/lisp/ao_lisp.h | |
| parent | 8f2d60b4c029bffaa559bd1f31f5b15230dfa674 (diff) | |
altos/lisp: Append a CRC to the saved image to validate on restore
The CRC is actually of the ROM bits, so we can tell if the restored
image relates to the currently running code.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/lisp/ao_lisp.h')
| -rw-r--r-- | src/lisp/ao_lisp.h | 18 | 
1 files changed, 13 insertions, 5 deletions
| diff --git a/src/lisp/ao_lisp.h b/src/lisp/ao_lisp.h index 44838a34..ea3d2a09 100644 --- a/src/lisp/ao_lisp.h +++ b/src/lisp/ao_lisp.h @@ -26,16 +26,22 @@ typedef int16_t		ao_signed_poly;  #ifdef AO_LISP_SAVE  struct ao_lisp_os_save { -	ao_poly	ao_lisp_atoms; -	ao_poly	ao_lisp_globals; +	ao_poly		atoms; +	ao_poly		globals; +	uint16_t	const_checksum; +	uint16_t	const_checksum_inv;  }; -#define AO_LISP_POOL	(AO_LISP_POOL_TOTAL - sizeof (struct ao_lisp_os_save)) +#define AO_LISP_POOL_EXTRA	(sizeof(struct ao_lisp_os_save)) +#define AO_LISP_POOL	((int) (AO_LISP_POOL_TOTAL - AO_LISP_POOL_EXTRA))  int  ao_lisp_os_save(void);  int +ao_lisp_os_restore_save(struct ao_lisp_os_save *save, int offset); + +int  ao_lisp_os_restore(void);  #endif @@ -67,12 +73,14 @@ extern uint8_t ao_lisp_const[AO_LISP_POOL_CONST];  #define _ao_lisp_atom_eval	_atom("eval")  #define _ao_lisp_atom_read	_atom("read")  #define _ao_lisp_atom_eof	_atom("eof") +#define _ao_lisp_atom_save	_atom("save") +#define _ao_lisp_atom_restore	_atom("restore")  #else  #include "ao_lisp_const.h"  #ifndef AO_LISP_POOL -#define AO_LISP_POOL	16384 +#define AO_LISP_POOL	3072  #endif -extern uint8_t		ao_lisp_pool[AO_LISP_POOL]; +extern uint8_t		ao_lisp_pool[AO_LISP_POOL + AO_LISP_POOL_EXTRA];  #endif  /* Primitive types */ | 
