ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/uae_cpu/memory.cpp
Revision: 1.8
Committed: 2005-06-05T07:32:23Z (19 years, 5 months ago) by gbeauche
Branch: MAIN
CVS Tags: nigel-build-19, nigel-build-17
Changes since 1.7: +6 -6 lines
Log Message:
Fix build with NO_INLINE_MEMORY_ACCESS set

File Contents

# Content
1 /*
2 * UAE - The Un*x Amiga Emulator
3 *
4 * Memory management
5 *
6 * (c) 1995 Bernd Schmidt
7 */
8
9 #include <stdio.h>
10 #include <stdlib.h>
11
12 #include "sysdeps.h"
13
14 #include "cpu_emulation.h"
15 #include "main.h"
16 #include "video.h"
17
18 #include "m68k.h"
19 #include "memory.h"
20 #include "readcpu.h"
21 #include "newcpu.h"
22
23 #if !REAL_ADDRESSING && !DIRECT_ADDRESSING
24
25 static bool illegal_mem = false;
26
27 #ifdef SAVE_MEMORY_BANKS
28 addrbank *mem_banks[65536];
29 #else
30 addrbank mem_banks[65536];
31 #endif
32
33 #ifdef WORDS_BIGENDIAN
34 # define swap_words(X) (X)
35 #else
36 # define swap_words(X) (((X) >> 16) | ((X) << 16))
37 #endif
38
39 #ifdef NO_INLINE_MEMORY_ACCESS
40 uae_u32 longget (uaecptr addr)
41 {
42 return call_mem_get_func (get_mem_bank (addr).lget, addr);
43 }
44 uae_u32 wordget (uaecptr addr)
45 {
46 return call_mem_get_func (get_mem_bank (addr).wget, addr);
47 }
48 uae_u32 byteget (uaecptr addr)
49 {
50 return call_mem_get_func (get_mem_bank (addr).bget, addr);
51 }
52 void longput (uaecptr addr, uae_u32 l)
53 {
54 call_mem_put_func (get_mem_bank (addr).lput, addr, l);
55 }
56 void wordput (uaecptr addr, uae_u32 w)
57 {
58 call_mem_put_func (get_mem_bank (addr).wput, addr, w);
59 }
60 void byteput (uaecptr addr, uae_u32 b)
61 {
62 call_mem_put_func (get_mem_bank (addr).bput, addr, b);
63 }
64 #endif
65
66 /* A dummy bank that only contains zeros */
67
68 static uae_u32 REGPARAM2 dummy_lget (uaecptr) REGPARAM;
69 static uae_u32 REGPARAM2 dummy_wget (uaecptr) REGPARAM;
70 static uae_u32 REGPARAM2 dummy_bget (uaecptr) REGPARAM;
71 static void REGPARAM2 dummy_lput (uaecptr, uae_u32) REGPARAM;
72 static void REGPARAM2 dummy_wput (uaecptr, uae_u32) REGPARAM;
73 static void REGPARAM2 dummy_bput (uaecptr, uae_u32) REGPARAM;
74 static int REGPARAM2 dummy_check (uaecptr addr, uae_u32 size) REGPARAM;
75
76 uae_u32 REGPARAM2 dummy_lget (uaecptr addr)
77 {
78 if (illegal_mem)
79 write_log ("Illegal lget at %08lx\n", addr);
80
81 return 0;
82 }
83
84 uae_u32 REGPARAM2 dummy_wget (uaecptr addr)
85 {
86 if (illegal_mem)
87 write_log ("Illegal wget at %08lx\n", addr);
88
89 return 0;
90 }
91
92 uae_u32 REGPARAM2 dummy_bget (uaecptr addr)
93 {
94 if (illegal_mem)
95 write_log ("Illegal bget at %08lx\n", addr);
96
97 return 0;
98 }
99
100 void REGPARAM2 dummy_lput (uaecptr addr, uae_u32 l)
101 {
102 if (illegal_mem)
103 write_log ("Illegal lput at %08lx\n", addr);
104 }
105 void REGPARAM2 dummy_wput (uaecptr addr, uae_u32 w)
106 {
107 if (illegal_mem)
108 write_log ("Illegal wput at %08lx\n", addr);
109 }
110 void REGPARAM2 dummy_bput (uaecptr addr, uae_u32 b)
111 {
112 if (illegal_mem)
113 write_log ("Illegal bput at %08lx\n", addr);
114 }
115
116 int REGPARAM2 dummy_check (uaecptr addr, uae_u32 size)
117 {
118 if (illegal_mem)
119 write_log ("Illegal check at %08lx\n", addr);
120
121 return 0;
122 }
123
124 /* Mac RAM (32 bit addressing) */
125
126 static uae_u32 REGPARAM2 ram_lget(uaecptr) REGPARAM;
127 static uae_u32 REGPARAM2 ram_wget(uaecptr) REGPARAM;
128 static uae_u32 REGPARAM2 ram_bget(uaecptr) REGPARAM;
129 static void REGPARAM2 ram_lput(uaecptr, uae_u32) REGPARAM;
130 static void REGPARAM2 ram_wput(uaecptr, uae_u32) REGPARAM;
131 static void REGPARAM2 ram_bput(uaecptr, uae_u32) REGPARAM;
132 static int REGPARAM2 ram_check(uaecptr addr, uae_u32 size) REGPARAM;
133 static uae_u8 *REGPARAM2 ram_xlate(uaecptr addr) REGPARAM;
134
135 static uintptr RAMBaseDiff; // RAMBaseHost - RAMBaseMac
136
137 uae_u32 REGPARAM2 ram_lget(uaecptr addr)
138 {
139 uae_u32 *m;
140 m = (uae_u32 *)(RAMBaseDiff + addr);
141 return do_get_mem_long(m);
142 }
143
144 uae_u32 REGPARAM2 ram_wget(uaecptr addr)
145 {
146 uae_u16 *m;
147 m = (uae_u16 *)(RAMBaseDiff + addr);
148 return do_get_mem_word(m);
149 }
150
151 uae_u32 REGPARAM2 ram_bget(uaecptr addr)
152 {
153 return (uae_u32)*(uae_u8 *)(RAMBaseDiff + addr);
154 }
155
156 void REGPARAM2 ram_lput(uaecptr addr, uae_u32 l)
157 {
158 uae_u32 *m;
159 m = (uae_u32 *)(RAMBaseDiff + addr);
160 do_put_mem_long(m, l);
161 }
162
163 void REGPARAM2 ram_wput(uaecptr addr, uae_u32 w)
164 {
165 uae_u16 *m;
166 m = (uae_u16 *)(RAMBaseDiff + addr);
167 do_put_mem_word(m, w);
168 }
169
170 void REGPARAM2 ram_bput(uaecptr addr, uae_u32 b)
171 {
172 *(uae_u8 *)(RAMBaseDiff + addr) = b;
173 }
174
175 int REGPARAM2 ram_check(uaecptr addr, uae_u32 size)
176 {
177 return (addr - RAMBaseMac + size) < RAMSize;
178 }
179
180 uae_u8 *REGPARAM2 ram_xlate(uaecptr addr)
181 {
182 return (uae_u8 *)(RAMBaseDiff + addr);
183 }
184
185 /* Mac RAM (24 bit addressing) */
186
187 static uae_u32 REGPARAM2 ram24_lget(uaecptr) REGPARAM;
188 static uae_u32 REGPARAM2 ram24_wget(uaecptr) REGPARAM;
189 static uae_u32 REGPARAM2 ram24_bget(uaecptr) REGPARAM;
190 static void REGPARAM2 ram24_lput(uaecptr, uae_u32) REGPARAM;
191 static void REGPARAM2 ram24_wput(uaecptr, uae_u32) REGPARAM;
192 static void REGPARAM2 ram24_bput(uaecptr, uae_u32) REGPARAM;
193 static int REGPARAM2 ram24_check(uaecptr addr, uae_u32 size) REGPARAM;
194 static uae_u8 *REGPARAM2 ram24_xlate(uaecptr addr) REGPARAM;
195
196 uae_u32 REGPARAM2 ram24_lget(uaecptr addr)
197 {
198 uae_u32 *m;
199 m = (uae_u32 *)(RAMBaseDiff + (addr & 0xffffff));
200 return do_get_mem_long(m);
201 }
202
203 uae_u32 REGPARAM2 ram24_wget(uaecptr addr)
204 {
205 uae_u16 *m;
206 m = (uae_u16 *)(RAMBaseDiff + (addr & 0xffffff));
207 return do_get_mem_word(m);
208 }
209
210 uae_u32 REGPARAM2 ram24_bget(uaecptr addr)
211 {
212 return (uae_u32)*(uae_u8 *)(RAMBaseDiff + (addr & 0xffffff));
213 }
214
215 void REGPARAM2 ram24_lput(uaecptr addr, uae_u32 l)
216 {
217 uae_u32 *m;
218 m = (uae_u32 *)(RAMBaseDiff + (addr & 0xffffff));
219 do_put_mem_long(m, l);
220 }
221
222 void REGPARAM2 ram24_wput(uaecptr addr, uae_u32 w)
223 {
224 uae_u16 *m;
225 m = (uae_u16 *)(RAMBaseDiff + (addr & 0xffffff));
226 do_put_mem_word(m, w);
227 }
228
229 void REGPARAM2 ram24_bput(uaecptr addr, uae_u32 b)
230 {
231 *(uae_u8 *)(RAMBaseDiff + (addr & 0xffffff)) = b;
232 }
233
234 int REGPARAM2 ram24_check(uaecptr addr, uae_u32 size)
235 {
236 return ((addr & 0xffffff) - RAMBaseMac + size) < RAMSize;
237 }
238
239 uae_u8 *REGPARAM2 ram24_xlate(uaecptr addr)
240 {
241 return (uae_u8 *)(RAMBaseDiff + (addr & 0xffffff));
242 }
243
244 /* Mac ROM (32 bit addressing) */
245
246 static uae_u32 REGPARAM2 rom_lget(uaecptr) REGPARAM;
247 static uae_u32 REGPARAM2 rom_wget(uaecptr) REGPARAM;
248 static uae_u32 REGPARAM2 rom_bget(uaecptr) REGPARAM;
249 static void REGPARAM2 rom_lput(uaecptr, uae_u32) REGPARAM;
250 static void REGPARAM2 rom_wput(uaecptr, uae_u32) REGPARAM;
251 static void REGPARAM2 rom_bput(uaecptr, uae_u32) REGPARAM;
252 static int REGPARAM2 rom_check(uaecptr addr, uae_u32 size) REGPARAM;
253 static uae_u8 *REGPARAM2 rom_xlate(uaecptr addr) REGPARAM;
254
255 static uintptr ROMBaseDiff; // ROMBaseHost - ROMBaseMac
256
257 uae_u32 REGPARAM2 rom_lget(uaecptr addr)
258 {
259 uae_u32 *m;
260 m = (uae_u32 *)(ROMBaseDiff + addr);
261 return do_get_mem_long(m);
262 }
263
264 uae_u32 REGPARAM2 rom_wget(uaecptr addr)
265 {
266 uae_u16 *m;
267 m = (uae_u16 *)(ROMBaseDiff + addr);
268 return do_get_mem_word(m);
269 }
270
271 uae_u32 REGPARAM2 rom_bget(uaecptr addr)
272 {
273 return (uae_u32)*(uae_u8 *)(ROMBaseDiff + addr);
274 }
275
276 void REGPARAM2 rom_lput(uaecptr addr, uae_u32 b)
277 {
278 if (illegal_mem)
279 write_log ("Illegal ROM lput at %08lx\n", addr);
280 }
281
282 void REGPARAM2 rom_wput(uaecptr addr, uae_u32 b)
283 {
284 if (illegal_mem)
285 write_log ("Illegal ROM wput at %08lx\n", addr);
286 }
287
288 void REGPARAM2 rom_bput(uaecptr addr, uae_u32 b)
289 {
290 if (illegal_mem)
291 write_log ("Illegal ROM bput at %08lx\n", addr);
292 }
293
294 int REGPARAM2 rom_check(uaecptr addr, uae_u32 size)
295 {
296 return (addr - ROMBaseMac + size) < ROMSize;
297 }
298
299 uae_u8 *REGPARAM2 rom_xlate(uaecptr addr)
300 {
301 return (uae_u8 *)(ROMBaseDiff + addr);
302 }
303
304 /* Mac ROM (24 bit addressing) */
305
306 static uae_u32 REGPARAM2 rom24_lget(uaecptr) REGPARAM;
307 static uae_u32 REGPARAM2 rom24_wget(uaecptr) REGPARAM;
308 static uae_u32 REGPARAM2 rom24_bget(uaecptr) REGPARAM;
309 static int REGPARAM2 rom24_check(uaecptr addr, uae_u32 size) REGPARAM;
310 static uae_u8 *REGPARAM2 rom24_xlate(uaecptr addr) REGPARAM;
311
312 uae_u32 REGPARAM2 rom24_lget(uaecptr addr)
313 {
314 uae_u32 *m;
315 m = (uae_u32 *)(ROMBaseDiff + (addr & 0xffffff));
316 return do_get_mem_long(m);
317 }
318
319 uae_u32 REGPARAM2 rom24_wget(uaecptr addr)
320 {
321 uae_u16 *m;
322 m = (uae_u16 *)(ROMBaseDiff + (addr & 0xffffff));
323 return do_get_mem_word(m);
324 }
325
326 uae_u32 REGPARAM2 rom24_bget(uaecptr addr)
327 {
328 return (uae_u32)*(uae_u8 *)(ROMBaseDiff + (addr & 0xffffff));
329 }
330
331 int REGPARAM2 rom24_check(uaecptr addr, uae_u32 size)
332 {
333 return ((addr & 0xffffff) - ROMBaseMac + size) < ROMSize;
334 }
335
336 uae_u8 *REGPARAM2 rom24_xlate(uaecptr addr)
337 {
338 return (uae_u8 *)(ROMBaseDiff + (addr & 0xffffff));
339 }
340
341 /* Frame buffer */
342
343 static uae_u32 REGPARAM2 frame_direct_lget(uaecptr) REGPARAM;
344 static uae_u32 REGPARAM2 frame_direct_wget(uaecptr) REGPARAM;
345 static uae_u32 REGPARAM2 frame_direct_bget(uaecptr) REGPARAM;
346 static void REGPARAM2 frame_direct_lput(uaecptr, uae_u32) REGPARAM;
347 static void REGPARAM2 frame_direct_wput(uaecptr, uae_u32) REGPARAM;
348 static void REGPARAM2 frame_direct_bput(uaecptr, uae_u32) REGPARAM;
349
350 static uae_u32 REGPARAM2 frame_host_555_lget(uaecptr) REGPARAM;
351 static uae_u32 REGPARAM2 frame_host_555_wget(uaecptr) REGPARAM;
352 static void REGPARAM2 frame_host_555_lput(uaecptr, uae_u32) REGPARAM;
353 static void REGPARAM2 frame_host_555_wput(uaecptr, uae_u32) REGPARAM;
354
355 static uae_u32 REGPARAM2 frame_host_565_lget(uaecptr) REGPARAM;
356 static uae_u32 REGPARAM2 frame_host_565_wget(uaecptr) REGPARAM;
357 static void REGPARAM2 frame_host_565_lput(uaecptr, uae_u32) REGPARAM;
358 static void REGPARAM2 frame_host_565_wput(uaecptr, uae_u32) REGPARAM;
359
360 static uae_u32 REGPARAM2 frame_host_888_lget(uaecptr) REGPARAM;
361 static void REGPARAM2 frame_host_888_lput(uaecptr, uae_u32) REGPARAM;
362
363 static int REGPARAM2 frame_check(uaecptr addr, uae_u32 size) REGPARAM;
364 static uae_u8 *REGPARAM2 frame_xlate(uaecptr addr) REGPARAM;
365
366 static uintptr FrameBaseDiff; // MacFrameBaseHost - MacFrameBaseMac
367
368 uae_u32 REGPARAM2 frame_direct_lget(uaecptr addr)
369 {
370 uae_u32 *m;
371 m = (uae_u32 *)(FrameBaseDiff + addr);
372 return do_get_mem_long(m);
373 }
374
375 uae_u32 REGPARAM2 frame_direct_wget(uaecptr addr)
376 {
377 uae_u16 *m;
378 m = (uae_u16 *)(FrameBaseDiff + addr);
379 return do_get_mem_word(m);
380 }
381
382 uae_u32 REGPARAM2 frame_direct_bget(uaecptr addr)
383 {
384 return (uae_u32)*(uae_u8 *)(FrameBaseDiff + addr);
385 }
386
387 void REGPARAM2 frame_direct_lput(uaecptr addr, uae_u32 l)
388 {
389 uae_u32 *m;
390 m = (uae_u32 *)(FrameBaseDiff + addr);
391 do_put_mem_long(m, l);
392 }
393
394 void REGPARAM2 frame_direct_wput(uaecptr addr, uae_u32 w)
395 {
396 uae_u16 *m;
397 m = (uae_u16 *)(FrameBaseDiff + addr);
398 do_put_mem_word(m, w);
399 }
400
401 void REGPARAM2 frame_direct_bput(uaecptr addr, uae_u32 b)
402 {
403 *(uae_u8 *)(FrameBaseDiff + addr) = b;
404 }
405
406 uae_u32 REGPARAM2 frame_host_555_lget(uaecptr addr)
407 {
408 uae_u32 *m, l;
409 m = (uae_u32 *)(FrameBaseDiff + addr);
410 l = *m;
411 return swap_words(l);
412 }
413
414 uae_u32 REGPARAM2 frame_host_555_wget(uaecptr addr)
415 {
416 uae_u16 *m;
417 m = (uae_u16 *)(FrameBaseDiff + addr);
418 return *m;
419 }
420
421 void REGPARAM2 frame_host_555_lput(uaecptr addr, uae_u32 l)
422 {
423 uae_u32 *m;
424 m = (uae_u32 *)(FrameBaseDiff + addr);
425 *m = swap_words(l);
426 }
427
428 void REGPARAM2 frame_host_555_wput(uaecptr addr, uae_u32 w)
429 {
430 uae_u16 *m;
431 m = (uae_u16 *)(FrameBaseDiff + addr);
432 *m = w;
433 }
434
435 uae_u32 REGPARAM2 frame_host_565_lget(uaecptr addr)
436 {
437 uae_u32 *m, l;
438 m = (uae_u32 *)(FrameBaseDiff + addr);
439 l = *m;
440 l = (l & 0x001f001f) | ((l >> 1) & 0x7fe07fe0);
441 return swap_words(l);
442 }
443
444 uae_u32 REGPARAM2 frame_host_565_wget(uaecptr addr)
445 {
446 uae_u16 *m, w;
447 m = (uae_u16 *)(FrameBaseDiff + addr);
448 w = *m;
449 return (w & 0x1f) | ((w >> 1) & 0x7fe0);
450 }
451
452 void REGPARAM2 frame_host_565_lput(uaecptr addr, uae_u32 l)
453 {
454 uae_u32 *m;
455 m = (uae_u32 *)(FrameBaseDiff + addr);
456 l = (l & 0x001f001f) | ((l << 1) & 0xffc0ffc0);
457 *m = swap_words(l);
458 }
459
460 void REGPARAM2 frame_host_565_wput(uaecptr addr, uae_u32 w)
461 {
462 uae_u16 *m;
463 m = (uae_u16 *)(FrameBaseDiff + addr);
464 *m = (w & 0x1f) | ((w << 1) & 0xffc0);
465 }
466
467 uae_u32 REGPARAM2 frame_host_888_lget(uaecptr addr)
468 {
469 uae_u32 *m, l;
470 m = (uae_u32 *)(FrameBaseDiff + addr);
471 return *m;
472 }
473
474 void REGPARAM2 frame_host_888_lput(uaecptr addr, uae_u32 l)
475 {
476 uae_u32 *m;
477 m = (uae_u32 *)(MacFrameBaseHost + addr - MacFrameBaseMac);
478 *m = l;
479 }
480
481 int REGPARAM2 frame_check(uaecptr addr, uae_u32 size)
482 {
483 return (addr - MacFrameBaseMac + size) < MacFrameSize;
484 }
485
486 uae_u8 *REGPARAM2 frame_xlate(uaecptr addr)
487 {
488 return (uae_u8 *)(FrameBaseDiff + addr);
489 }
490
491 /* Default memory access functions */
492
493 int REGPARAM2 default_check (uaecptr a, uae_u32 b)
494 {
495 return 0;
496 }
497
498 uae_u8 *REGPARAM2 default_xlate (uaecptr a)
499 {
500 write_log("Your Mac program just did something terribly stupid\n");
501 return NULL;
502 }
503
504 /* Address banks */
505
506 addrbank dummy_bank = {
507 dummy_lget, dummy_wget, dummy_bget,
508 dummy_lput, dummy_wput, dummy_bput,
509 default_xlate, dummy_check
510 };
511
512 addrbank ram_bank = {
513 ram_lget, ram_wget, ram_bget,
514 ram_lput, ram_wput, ram_bput,
515 ram_xlate, ram_check
516 };
517
518 addrbank ram24_bank = {
519 ram24_lget, ram24_wget, ram24_bget,
520 ram24_lput, ram24_wput, ram24_bput,
521 ram24_xlate, ram24_check
522 };
523
524 addrbank rom_bank = {
525 rom_lget, rom_wget, rom_bget,
526 rom_lput, rom_wput, rom_bput,
527 rom_xlate, rom_check
528 };
529
530 addrbank rom24_bank = {
531 rom24_lget, rom24_wget, rom24_bget,
532 rom_lput, rom_wput, rom_bput,
533 rom24_xlate, rom24_check
534 };
535
536 addrbank frame_direct_bank = {
537 frame_direct_lget, frame_direct_wget, frame_direct_bget,
538 frame_direct_lput, frame_direct_wput, frame_direct_bput,
539 frame_xlate, frame_check
540 };
541
542 addrbank frame_host_555_bank = {
543 frame_host_555_lget, frame_host_555_wget, frame_direct_bget,
544 frame_host_555_lput, frame_host_555_wput, frame_direct_bput,
545 frame_xlate, frame_check
546 };
547
548 addrbank frame_host_565_bank = {
549 frame_host_565_lget, frame_host_565_wget, frame_direct_bget,
550 frame_host_565_lput, frame_host_565_wput, frame_direct_bput,
551 frame_xlate, frame_check
552 };
553
554 addrbank frame_host_888_bank = {
555 frame_host_888_lget, frame_direct_wget, frame_direct_bget,
556 frame_host_888_lput, frame_direct_wput, frame_direct_bput,
557 frame_xlate, frame_check
558 };
559
560 void memory_init(void)
561 {
562 for(long i=0; i<65536; i++)
563 put_mem_bank(i<<16, &dummy_bank);
564
565 // Limit RAM size to not overlap ROM
566 uint32 ram_size = RAMSize > ROMBaseMac ? ROMBaseMac : RAMSize;
567
568 RAMBaseDiff = (uintptr)RAMBaseHost - (uintptr)RAMBaseMac;
569 ROMBaseDiff = (uintptr)ROMBaseHost - (uintptr)ROMBaseMac;
570 FrameBaseDiff = (uintptr)MacFrameBaseHost - (uintptr)MacFrameBaseMac;
571
572 // Map RAM and ROM
573 if (TwentyFourBitAddressing) {
574 map_banks(&ram24_bank, RAMBaseMac >> 16, ram_size >> 16);
575 map_banks(&rom24_bank, ROMBaseMac >> 16, ROMSize >> 16);
576 } else {
577 map_banks(&ram_bank, RAMBaseMac >> 16, ram_size >> 16);
578 map_banks(&rom_bank, ROMBaseMac >> 16, ROMSize >> 16);
579 }
580
581 // Map frame buffer
582 switch (MacFrameLayout) {
583 case FLAYOUT_DIRECT:
584 map_banks(&frame_direct_bank, MacFrameBaseMac >> 16, (MacFrameSize >> 16) + 1);
585 break;
586 case FLAYOUT_HOST_555:
587 map_banks(&frame_host_555_bank, MacFrameBaseMac >> 16, (MacFrameSize >> 16) + 1);
588 break;
589 case FLAYOUT_HOST_565:
590 map_banks(&frame_host_565_bank, MacFrameBaseMac >> 16, (MacFrameSize >> 16) + 1);
591 break;
592 case FLAYOUT_HOST_888:
593 map_banks(&frame_host_888_bank, MacFrameBaseMac >> 16, (MacFrameSize >> 16) + 1);
594 break;
595 }
596 }
597
598 void map_banks(addrbank *bank, int start, int size)
599 {
600 int bnr;
601 unsigned long int hioffs = 0, endhioffs = 0x100;
602
603 if (start >= 0x100) {
604 for (bnr = start; bnr < start + size; bnr++)
605 put_mem_bank (bnr << 16, bank);
606 return;
607 }
608 if (TwentyFourBitAddressing) endhioffs = 0x10000;
609 for (hioffs = 0; hioffs < endhioffs; hioffs += 0x100)
610 for (bnr = start; bnr < start+size; bnr++)
611 put_mem_bank((bnr + hioffs) << 16, bank);
612 }
613
614 #endif /* !REAL_ADDRESSING && !DIRECT_ADDRESSING */
615