/** * Forth heap and compile memory * * Created on 2021/11/13. */ #ifndef FORTH_FH_MEM_H #define FORTH_FH_MEM_H void fh_setbase(struct fh_thread_s *fh, uint32_t base); enum fh_error fh_fetch(struct fh_thread_s *fh, uint32_t addr, uint32_t *dst); enum fh_error fh_fetch_char(struct fh_thread_s *fh, uint32_t addr, char *dst); enum fh_error fh_store(struct fh_thread_s *fh, uint32_t addr, uint32_t val); enum fh_error fh_store_char(struct fh_thread_s *fh, uint32_t addr, char val); enum fh_error fh_heap_reserve( struct fh_thread_s *fh, size_t len, uint32_t *addr ); void fh_heap_write(struct fh_thread_s *fh, uint32_t addr, const void *src, uint32_t len); enum fh_error fh_heap_put(struct fh_thread_s *fh, const void *src, uint32_t len); void fh_heap_copy(struct fh_thread_s *fh, uint32_t addr, uint32_t srcaddr, uint32_t len); static inline char *fh_str_at(struct fh_thread_s *fh, uint32_t addr) { return (char *) &fh->heap[addr]; } static inline struct fh_instruction_s *fh_instr_at(struct fh_thread_s *fh, uint32_t addr) { return (void *) &fh->heap[addr]; } static inline struct fh_word_s *fh_word_at(struct fh_thread_s *fh, uint32_t addr) { return (struct fh_word_s *) &fh->heap[addr]; } #endif //FORTH_FH_MEM_H