ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/uae_cpu/memory.h
(Generate patch)

Comparing BasiliskII/src/uae_cpu/memory.h (file contents):
Revision 1.1 by cebix, 1999-10-03T14:16:26Z vs.
Revision 1.4 by gbeauche, 2001-07-07T09:08:54Z

# Line 9 | Line 9
9   #ifndef UAE_MEMORY_H
10   #define UAE_MEMORY_H
11  
12 + #if !DIRECT_ADDRESSING && !REAL_ADDRESSING
13 +
14   /* Enabling this adds one additional native memory reference per 68k memory
15   * access, but saves one shift (on the x86). Enabling this is probably
16   * better for the cache. My favourite benchmark (PP2) doesn't show a
# Line 108 | Line 110 | extern void byteput(uaecptr addr, uae_u3
110  
111   #endif
112  
113 + #endif /* !DIRECT_ADDRESSING && !REAL_ADDRESSING */
114 +
115   #if REAL_ADDRESSING
116 + const uintptr MEMBaseDiff = 0;
117 + #endif
118 + #if DIRECT_ADDRESSING
119 + extern uintptr MEMBaseDiff;
120 + #endif
121 +
122 + static __inline__ uae_u8 *do_get_real_address(uaecptr addr)
123 + {
124 +        return (uae_u8 *)MEMBaseDiff + addr;
125 + }
126 + static __inline__ uae_u32 do_get_virtual_address(uae_u8 *addr)
127 + {
128 +        return (uintptr)addr - MEMBaseDiff;
129 + }
130 +
131 + #if REAL_ADDRESSING || DIRECT_ADDRESSING
132   static __inline__ uae_u32 get_long(uaecptr addr)
133   {
134 <    return ntohl(*(uae_u32 *)addr);
134 >    uae_u32 * const m = (uae_u32 *)do_get_real_address(addr);
135 >    return do_get_mem_long(m);
136   }
137   static __inline__ uae_u32 get_word(uaecptr addr)
138   {
139 <    return ntohs(*(uae_u16 *)addr);
139 >    uae_u16 * const m = (uae_u16 *)do_get_real_address(addr);
140 >    return do_get_mem_word(m);
141   }
142   static __inline__ uae_u32 get_byte(uaecptr addr)
143   {
144 <    return *(uae_u8 *)addr;
144 >    uae_u8 * const m = (uae_u8 *)do_get_real_address(addr);
145 >    return do_get_mem_byte(m);
146   }
147   static __inline__ void put_long(uaecptr addr, uae_u32 l)
148   {
149 <    *(uae_u32 *)addr = htonl(l);
149 >    uae_u32 * const m = (uae_u32 *)do_get_real_address(addr);
150 >    do_put_mem_long(m, l);
151   }
152   static __inline__ void put_word(uaecptr addr, uae_u32 w)
153   {
154 <    *(uae_u16 *)addr = htons(w);
154 >    uae_u16 * const m = (uae_u16 *)do_get_real_address(addr);
155 >    do_put_mem_word(m, w);
156   }
157   static __inline__ void put_byte(uaecptr addr, uae_u32 b)
158   {
159 <    *(uae_u8 *)addr = b;
159 >    uae_u8 * const m = (uae_u8 *)do_get_real_address(addr);
160 >    do_put_mem_byte(m, b);
161   }
162   static __inline__ uae_u8 *get_real_address(uaecptr addr)
163   {
164 <    return (uae_u8 *)addr;
164 >        return do_get_real_address(addr);
165 > }
166 > static __inline__ uae_u32 get_virtual_address(uae_u8 *addr)
167 > {
168 >        return do_get_virtual_address(addr);
169   }
170   static __inline__ int valid_address(uaecptr addr, uae_u32 size)
171   {
# Line 166 | Line 196 | static __inline__ void put_byte(uaecptr
196   {
197      byteput_1(addr, b);
198   }
169
199   static __inline__ uae_u8 *get_real_address(uaecptr addr)
200   {
201      return get_mem_bank(addr).xlateaddr(addr);
202   }
203 <
203 > /* gb-- deliberately not implemented since it shall not be used... */
204 > extern uae_u32 get_virtual_address(uae_u8 *addr);
205   static __inline__ int valid_address(uaecptr addr, uae_u32 size)
206   {
207      return get_mem_bank(addr).check(addr, size);
208   }
209 < #endif
209 > #endif /* DIRECT_ADDRESSING || REAL_ADDRESSING */
210 >
211 > #endif /* MEMORY_H */
212  
181 #endif

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines