--- /dev/null
+
+#define SET_WORD_MEM(x,y) {saved_state.mem[(x)>>1] = y;}
+#define SET_BYTE_MEM(x,y) {BYTE_MEM(x)=y;}
+
+#define WORD_MEM(x) (saved_state.mem[(x)>>1])
+#define BYTE_MEM(x) (*(((char *)(saved_state.mem))+((x)^HOST_IS_LITTLE_ENDIAN)))
+
+#define CCR 8
+#define PC 9
+#define CYCLES 10
+#define HCHECK 11
+#define TIER 12
+#define TCSR 13
+#define FRC 14
+#define OCRA 15
+#define OCRB 16
+#define TCR 17
+#define TOCR 18
+#define ICRA 19
+#define NREG 20
+struct state
+{
+ unsigned short int reg[NREG];
+ unsigned char *(bregp[16]);
+ unsigned char *(bregp_NNNNxxxx[256]);
+ unsigned char *(bregp_xxxxNNNN[256]);
+ unsigned short int *(wregp_xNNNxxxx[256]);
+ unsigned short int *(wregp_xxxxxNNN[256]);
+ int exception;
+ int ienable;
+ unsigned short *mem;
+}
+
+saved_state;
+
+
+
+#define OCFA (1<<3)
+#define OCFB (1<<2)
+#define CCLRA (1<<0)
+/* TCR bits */
+#define OCIEA (1<<3)
+#define OCIEB (1<<2)
+#define OVIE (1<<1)
+#define OVF (1<<1)
+
+/* TOCR bits */
+#define OCRS (1<<4)
+
+
+#ifdef __GO32__
+#define HOST_IS_LITTLE_ENDIAN 1
+#else
+#define HOST_IS_LITTLE_ENDIAN 0
+#endif
+
+#define SAVE_INTERPRETER_STATE() \
+saved_state.reg[CYCLES] = cycles; \
+saved_state.reg[PC] = (pc - saved_state.mem) <<1; \
+saved_state.reg[CCR] = GET_CCR(); \
+store_timer_state_to_mem();
+
+#define LOAD_INTERPRETER_STATE() \
+ SET_CCR (saved_state.reg[CCR]); \
+ checkfreq = saved_state.reg[HCHECK]; \
+ pc = (saved_state.reg[PC]>>1) + saved_state.mem; \
+ load_timer_state_from_mem(); \
+ cycles=saved_state.reg[CYCLES];