+ cl_event_break_operator(class cl_memory_cell *acell, t_addr addr,
+ t_mem *data_place, t_mem the_mask,
+ class cl_uc *auc, class cl_brk *the_bp):
+ cl_memory_operator(acell, addr, data_place, the_mask)
+ {
+ uc= auc;
+ bp= the_bp;
+ }
+
+ virtual bool match(class cl_brk *brk) { return(bp == brk); }
+};
+
+class cl_write_operator: public cl_event_break_operator
+{
+public:
+ cl_write_operator(class cl_memory_cell *acell, t_addr addr,
+ t_mem *data_place, t_mem the_mask,
+ class cl_uc *auc, class cl_brk *the_bp);
+
+ virtual t_mem write(t_mem val);
+};
+
+class cl_read_operator: public cl_event_break_operator
+{
+public:
+ cl_read_operator(class cl_memory_cell *acell, t_addr addr,
+ t_mem *data_place, t_mem the_mask,
+ class cl_uc *auc, class cl_brk *the_bp);
+
+ virtual t_mem read(void);
+};
+
+
+/*
+ * version 3 of cell
+ */
+
+class cl_memory_cell: public cl_base
+{
+#ifdef STATISTIC
+public:
+ unsigned long nuof_writes, nuof_reads;
+#endif
+protected:
+ t_mem *data;
+ t_mem mask;
+ uchar width;
+ TYPE_UBYTE flags;
+ class cl_memory_operator *operators;
+public:
+ cl_memory_cell(void);
+ virtual ~cl_memory_cell(void);
+ virtual int init(void);
+
+ virtual t_mem *get_data(void) { return(data); }
+ virtual t_mem get_mask(void) { return(mask); }
+ virtual TYPE_UBYTE get_flags(void);
+ virtual bool get_flag(enum cell_flag flag);
+ virtual void set_flags(TYPE_UBYTE what);
+ virtual void set_flag(enum cell_flag flag, bool val);
+
+ virtual void un_decode(void);
+ virtual void decode(class cl_memory_chip *chip, t_addr addr);
+
+ virtual t_mem read(void);
+ virtual t_mem read(enum hw_cath skip);
+ virtual t_mem get(void);
+ virtual t_mem write(t_mem val);
+ virtual t_mem set(t_mem val);
+
+ virtual t_mem add(long what);
+ virtual t_mem wadd(long what);
+
+ virtual void set_bit1(t_mem bits);
+ virtual void set_bit0(t_mem bits);
+
+ virtual void append_operator(class cl_memory_operator *op);
+ virtual void prepend_operator(class cl_memory_operator *op);
+ virtual void del_operator(class cl_brk *brk);
+
+ virtual class cl_memory_cell *add_hw(class cl_hw *hw, int *ith, t_addr addr);
+ //virtual class cl_hw *get_hw(int ith);
+ virtual class cl_event_handler *get_event_handler(void);
+};
+
+class cl_dummy_cell: public cl_memory_cell
+{
+public:
+ cl_dummy_cell(void): cl_memory_cell() {}
+
+ virtual t_mem write(t_mem val);
+ virtual t_mem set(t_mem val);
+};
+
+
+/*
+ * Address space
+ */
+
+class cl_memory_chip;