+#define WTD_WRITE (wtd_write|wtd_restore_write)
+#define WTD_RESTORE (wtd_restore|wtd_restore_write)
+
+class cl_hw; // forward
+
+class cl_watched_cell: public cl_base
+{
+protected:
+ class cl_address_space *mem;
+ t_addr addr;
+ class cl_memory_cell *cell;
+ class cl_memory_cell **store;
+public:
+ enum what_to_do_on_cell_change wtd;
+public:
+ cl_watched_cell(class cl_address_space *amem, t_addr aaddr,
+ class cl_memory_cell **astore,
+ enum what_to_do_on_cell_change awtd);
+
+ virtual void mem_cell_changed(class cl_address_space *amem, t_addr aaddr,
+ class cl_hw *hw);
+ virtual void address_space_added(class cl_address_space *amem,
+ class cl_hw *hw);
+};
+
+class cl_used_cell: public cl_watched_cell
+{
+public:
+ cl_used_cell(class cl_address_space *amem, t_addr aaddr,
+ class cl_memory_cell **astore,
+ enum what_to_do_on_cell_change awtd):
+ cl_watched_cell(amem, aaddr, astore, awtd) {}
+
+ virtual void mem_cell_changed(class cl_address_space *amem, t_addr aaddr,
+ class cl_hw *hw);
+ virtual void address_space_added(class cl_address_space *amem,
+ class cl_hw *hw);
+};
+
+class cl_hw: public cl_guiobj