home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / gnu / gdb-4.9 / sim / h8300 / state.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-05-12  |  2.0 KB  |  87 lines

  1. /* 
  2.    Written by Steve Chamberlain of Cygnus Support.
  3.    sac@cygnus.com
  4.  
  5.    This file is part of H8/300 sim
  6.  
  7.  
  8.         THIS SOFTWARE IS NOT COPYRIGHTED
  9.  
  10.    Cygnus offers the following for use in the public domain.  Cygnus
  11.    makes no warranty with regard to the software or it's performance
  12.    and the user accepts the software "AS IS" with all faults.
  13.  
  14.    CYGNUS DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD TO
  15.    THIS SOFTWARE INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  16.    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  17.  
  18. */
  19. #include "../endian.h"
  20. #define SET_WORD_MEM(x,y)  {saved_state.mem[(x)>>1] = y;}
  21. #define SET_BYTE_MEM(x,y)  {BYTE_MEM(x)=y;}
  22.  
  23. #define WORD_MEM(x)  (saved_state.mem[(x)>>1])
  24. #define BYTE_MEM(x)  (*(((char *)(saved_state.mem))+((x)^HOST_IS_LITTLE_ENDIAN)))
  25.  
  26. #define CCR     8
  27. #define PC     9
  28. #define CYCLES     10
  29. #define HCHECK     11
  30. #define TIER     12
  31. #define TCSR     13
  32. #define FRC     14
  33. #define OCRA     15
  34. #define OCRB     16
  35. #define TCR     17
  36. #define TOCR     18
  37. #define ICRA     19
  38. #define NREG 20
  39. struct state
  40. {
  41.   unsigned short int reg[NREG];
  42.   unsigned char *(bregp[16]);
  43.   unsigned char *(bregp_NNNNxxxx[256]);
  44.   unsigned char *(bregp_xxxxNNNN[256]);
  45.   unsigned short int *(wregp_xNNNxxxx[256]);
  46.   unsigned short int *(wregp_xxxxxNNN[256]);
  47.   int exception;
  48.   int ienable;
  49.   unsigned short *mem;
  50. }
  51.  
  52. saved_state;
  53.  
  54.  
  55.  
  56. #define OCFA (1<<3)
  57. #define OCFB (1<<2)
  58. #define CCLRA (1<<0)
  59. /* TCR bits */
  60. #define OCIEA (1<<3)
  61. #define OCIEB (1<<2)
  62. #define OVIE (1<<1)
  63. #define OVF  (1<<1)
  64.  
  65. /* TOCR bits */
  66. #define OCRS (1<<4)
  67.  
  68.  
  69. #ifdef LITTLE_ENDIAN_HOST
  70. #define HOST_IS_LITTLE_ENDIAN 1
  71. #else
  72. #define HOST_IS_LITTLE_ENDIAN 0
  73. #endif
  74.  
  75. #define SAVE_INTERPRETER_STATE() \
  76. saved_state.reg[CYCLES] = cycles; \
  77. saved_state.reg[PC] = (pc - saved_state.mem) <<1; \
  78. saved_state.reg[CCR] = GET_CCR();  \
  79. store_timer_state_to_mem(); 
  80.  
  81. #define LOAD_INTERPRETER_STATE() \
  82.   SET_CCR (saved_state.reg[CCR]); \
  83.   checkfreq = saved_state.reg[HCHECK]; \
  84.   pc = (saved_state.reg[PC]>>1) + saved_state.mem; \
  85.   load_timer_state_from_mem(); \
  86.   cycles=saved_state.reg[CYCLES];
  87.