Annotation of previous/src/uae-cpu/memory.c, revision 1.1

1.1     ! root        1:  /*
        !             2:   * UAE - The Un*x Amiga Emulator - CPU core
        !             3:   *
        !             4:   * Memory management
        !             5:   *
        !             6:   * (c) 1995 Bernd Schmidt
        !             7:   *
        !             8:   * Adaptation to Hatari by Thomas Huth
        !             9:   * Adaptation to previous by Gilles Fetis
        !            10:   *
        !            11:   * This file is distributed under the GNU Public License, version 2 or at
        !            12:   * your option any later version. Read the file gpl.txt for details.
        !            13:   */
        !            14: const char Memory_fileid[] = "Previous memory.c : " __DATE__ " " __TIME__;
        !            15: 
        !            16: #include "config.h"
        !            17: #include "sysdeps.h"
        !            18: #include "hatari-glue.h"
        !            19: #include "maccess.h"
        !            20: #include "memory.h"
        !            21: 
        !            22: #include "main.h"
        !            23: #include "ioMem.h"
        !            24: #include "reset.h"
        !            25: #include "nextMemory.h"
        !            26: #include "m68000.h"
        !            27: 
        !            28: #include "newcpu.h"
        !            29: 
        !            30: 
        !            31: /* Set illegal_mem to 1 for debug output: */
        !            32: #define illegal_mem 1
        !            33: 
        !            34: /*
        !            35: approximative next memory map (source netbsd/next68k file cpu.h)
        !            36: 
        !            37: EPROM 128k (>cube 040)
        !            38: 0x00000000-0x0001FFFF
        !            39: mirrored at
        !            40: 0x01000000-0x0101FFFF
        !            41: 
        !            42: RAM (16x4=64Mb max)
        !            43: 0x04000000-0x07FFFFFF (0x047FFFFF for 8Mb)
        !            44: 
        !            45: device
        !            46: 0x02000000-0x0201BFFF
        !            47: mirrored at
        !            48: 0x02100000-0x0211BFFF
        !            49: 
        !            50: SCREEN
        !            51: 0x0B000000-0x0B03A7FF
        !            52: 
        !            53:  */
        !            54: #define NEXT_EPROM_START       0x00000000
        !            55: #define NEXT_EPROM2_START      0x01000000
        !            56: #define ROMmem_mask                    0x0001FFFF
        !            57: #define        ROMmem_size                     0x00020000
        !            58: #define NEXT_EPROM_SIZE                0x00020000
        !            59: 
        !            60: // ram is flat?
        !            61: #define NEXT_RAM_START         0x04000000
        !            62: #define NEXT_RAM_SPACE         0x40000000
        !            63: // #define NEXT_RAM_SIZE               0x007FE000
        !            64: #define NEXT_RAM_SIZE          0x07FFE000
        !            65: 
        !            66: uae_u32        NEXTmem_size; // unused
        !            67: #define NEXTmem_mask           0x00FFFFFF
        !            68: // for a mono screen
        !            69: #define NEXT_SCREEN                    0x0B000000
        !            70: #define NEXT_SCREEN_SIZE       0x00040000
        !            71: #define NEXTvideo_size NEXT_SCREEN_SIZE
        !            72: #define NEXTvideo_mask         0x0003FFFF
        !            73: uae_u8  NEXTVideo[256*1024];
        !            74: 
        !            75: 
        !            76: 
        !            77: #define IOmem_mask                     0x0001FFFF
        !            78: #define        IOmem_size                      0x0001C000
        !            79: #define NEXT_IO_START          0x02000000
        !            80: #define NEXT_IO2_START         0x02100000
        !            81: #define NEXT_IO_SIZE           0x00020000
        !            82: 
        !            83: #define NEXT_BMAP_START                0x020C0000
        !            84: #define NEXT_BMAP_SIZE         0x10000
        !            85: #define        NEXTbmap_size           NEXT_BMAP_SIZE
        !            86: #define        NEXTbmap_mask           0x0000FFFF
        !            87: uae_u8  NEXTbmap[NEXT_BMAP_SIZE];
        !            88: 
        !            89: #define NEXT_X06_START         0x06000000
        !            90: #define NEXT_X06_SIZE          0x10000
        !            91: #define        NEXTx06_size            NEXT_X06_SIZE
        !            92: #define        NEXTx06_mask            0x0000FFFF
        !            93: uae_u8  NEXTx06[NEXT_X06_SIZE];
        !            94: 
        !            95: #ifdef SAVE_MEMORY_BANKS
        !            96: addrbank *mem_banks[65536];
        !            97: #else
        !            98: addrbank mem_banks[65536];
        !            99: #endif
        !           100: 
        !           101: #ifdef NO_INLINE_MEMORY_ACCESS
        !           102: __inline__ uae_u32 longget (uaecptr addr)
        !           103: {
        !           104:     return call_mem_get_func (get_mem_bank (addr).lget, addr);
        !           105: }
        !           106: __inline__ uae_u32 wordget (uaecptr addr)
        !           107: {
        !           108:     return call_mem_get_func (get_mem_bank (addr).wget, addr);
        !           109: }
        !           110: __inline__ uae_u32 byteget (uaecptr addr)
        !           111: {
        !           112:     return call_mem_get_func (get_mem_bank (addr).bget, addr);
        !           113: }
        !           114: __inline__ void longput (uaecptr addr, uae_u32 l)
        !           115: {
        !           116:     call_mem_put_func (get_mem_bank (addr).lput, addr, l);
        !           117: }
        !           118: __inline__ void wordput (uaecptr addr, uae_u32 w)
        !           119: {
        !           120:     call_mem_put_func (get_mem_bank (addr).wput, addr, w);
        !           121: }
        !           122: __inline__ void byteput (uaecptr addr, uae_u32 b)
        !           123: {
        !           124:     call_mem_put_func (get_mem_bank (addr).bput, addr, b);
        !           125: }
        !           126: #endif
        !           127: 
        !           128: 
        !           129: /* Some prototypes: */
        !           130: extern void SDL_Quit(void);
        !           131: static int NEXTmem_check (uaecptr addr, uae_u32 size) REGPARAM;
        !           132: static uae_u8 *NEXTmem_xlate (uaecptr addr) REGPARAM;
        !           133: 
        !           134: 
        !           135: /* A dummy bank that only contains zeros */
        !           136: 
        !           137: static uae_u32 dummy_lget(uaecptr addr)
        !           138: {
        !           139:     if (illegal_mem)
        !           140:        write_log ("Illegal lget at %08lx PC=%08x\n", (long)addr,m68k_getpc());
        !           141:        // DebugUI();
        !           142: 
        !           143:     return 0xFFFFFFFF;
        !           144: }
        !           145: 
        !           146: static uae_u32 dummy_wget(uaecptr addr)
        !           147: {
        !           148:     if (illegal_mem)
        !           149:        write_log ("Illegal wget at %08lx PC=%08x\n", (long)addr,m68k_getpc());
        !           150:        // DebugUI();
        !           151: 
        !           152:     return 0xFFFF;
        !           153: }
        !           154: 
        !           155: static uae_u32 dummy_bget(uaecptr addr)
        !           156: {
        !           157:     if (illegal_mem)
        !           158:        write_log ("Illegal bget at %08lx PC=%08x\n", (long)addr,m68k_getpc());
        !           159:        // DebugUI();
        !           160: 
        !           161:     return 0xFF;
        !           162: }
        !           163: 
        !           164: static void dummy_lput(uaecptr addr, uae_u32 l)
        !           165: {
        !           166:     if (illegal_mem)
        !           167:        write_log ("Illegal lput %08x at %08lx PC=%08x\n",l, (long)addr,m68k_getpc());
        !           168:        // DebugUI();
        !           169: }
        !           170: 
        !           171: static void dummy_wput(uaecptr addr, uae_u32 w)
        !           172: {
        !           173:     if (illegal_mem)
        !           174:        write_log ("Illegal wput %04x at %08lx PC=%08x\n",w, (long)addr,m68k_getpc());
        !           175:        // DebugUI();
        !           176: }
        !           177: 
        !           178: static void dummy_bput(uaecptr addr, uae_u32 b)
        !           179: {
        !           180:     if (illegal_mem)
        !           181:        write_log ("Illegal bput %02x at %08lx PC=%08x\n",b, (long)addr,m68k_getpc());
        !           182:        // DebugUI();
        !           183: }
        !           184: 
        !           185: static int dummy_check(uaecptr addr, uae_u32 size)
        !           186: {
        !           187:     if (illegal_mem)
        !           188:        write_log ("Illegal check at %08lx PC=%08x\n", (long)addr,m68k_getpc());
        !           189: 
        !           190:     return 0;
        !           191: }
        !           192: 
        !           193: static uae_u8 *dummy_xlate(uaecptr addr)
        !           194: {
        !           195:     static uae_u8 dummy[16];
        !           196:     write_log("Your Next program just did something terribly stupid:"
        !           197:               " dummy_xlate($%x) PC=%08x\n", addr,m68k_getpc());
        !           198:  //   Reset_Warm();
        !           199:        DebugUI();
        !           200:     return dummy;
        !           201: //   return NEXTmem_xlate(addr);  /* So we don't crash. */
        !           202: }
        !           203: 
        !           204: 
        !           205: /* **** This memory bank only generates bus errors **** */
        !           206: 
        !           207: static uae_u32 BusErrMem_lget(uaecptr addr)
        !           208: {
        !           209:     if (illegal_mem)
        !           210:        write_log ("Bus error lget at %08lx pc=%08x\n", (long)addr,m68k_getpc());
        !           211: 
        !           212:     M68000_BusError(addr, 1);
        !           213:     return 0;
        !           214: }
        !           215: 
        !           216: static uae_u32 BusErrMem_wget(uaecptr addr)
        !           217: {
        !           218:     if (illegal_mem)
        !           219:        write_log ("Bus error wget at %08lx pc=%08x\n", (long)addr,m68k_getpc());
        !           220: 
        !           221:     M68000_BusError(addr, 1);
        !           222:     return 0;
        !           223: }
        !           224: 
        !           225: static uae_u32 BusErrMem_bget(uaecptr addr)
        !           226: {
        !           227:     if (illegal_mem)
        !           228:        write_log ("Bus error bget at %08lx  pc=%08x\n", (long)addr,m68k_getpc());
        !           229: 
        !           230:     M68000_BusError(addr, 1);
        !           231:     return 0;
        !           232: }
        !           233: 
        !           234: static void BusErrMem_lput(uaecptr addr, uae_u32 l)
        !           235: {
        !           236:     if (illegal_mem)
        !           237:        write_log ("Bus error lput at %08lx pc=%08x\n", (long)addr,m68k_getpc());
        !           238: 
        !           239:     M68000_BusError(addr, 0);
        !           240: }
        !           241: 
        !           242: static void BusErrMem_wput(uaecptr addr, uae_u32 w)
        !           243: {
        !           244:     if (illegal_mem)
        !           245:        write_log ("Bus error wput at %08lx pc=%08x\n", (long)addr,m68k_getpc());
        !           246: 
        !           247:     M68000_BusError(addr, 0);
        !           248: }
        !           249: 
        !           250: static void BusErrMem_bput(uaecptr addr, uae_u32 b)
        !           251: {
        !           252:     if (illegal_mem)
        !           253:        write_log ("Bus error bput at %08lx pc=%08x\n", (long)addr,m68k_getpc());
        !           254: 
        !           255:     M68000_BusError(addr, 0);
        !           256: }
        !           257: 
        !           258: static int BusErrMem_check(uaecptr addr, uae_u32 size)
        !           259: {
        !           260:     if (illegal_mem)
        !           261:        write_log ("Bus error check at %08lx pc=%08x\n", (long)addr,m68k_getpc());
        !           262: 
        !           263:     return 0;
        !           264: }
        !           265: 
        !           266: static uae_u8 *BusErrMem_xlate (uaecptr addr)
        !           267: {
        !           268:     write_log("Your Next program just did something terribly stupid:"
        !           269:               " BusErrMem_xlate($%x)\n", addr);
        !           270: 
        !           271: //    M68000_BusError(addr);*/
        !           272:     return NEXTmem_xlate(addr);  /* So we don't crash. */
        !           273: }
        !           274: 
        !           275: 
        !           276: /* **** NEXT RAM memory **** */
        !           277: 
        !           278: static uae_u32 NEXTmem_lget(uaecptr addr)
        !           279: {
        !           280:     addr &= NEXTmem_mask;
        !           281:     return do_get_mem_long(NEXTRam + addr);
        !           282: }
        !           283: 
        !           284: static uae_u32 NEXTmem_wget(uaecptr addr)
        !           285: {
        !           286:     addr &= NEXTmem_mask;
        !           287:     return do_get_mem_word(NEXTRam + addr);
        !           288: }
        !           289: 
        !           290: static uae_u32 NEXTmem_bget(uaecptr addr)
        !           291: {
        !           292:     addr &= NEXTmem_mask;
        !           293:     return NEXTRam[addr];
        !           294: }
        !           295: 
        !           296: static void NEXTmem_lput(uaecptr addr, uae_u32 l)
        !           297: {
        !           298:     addr &= NEXTmem_mask;
        !           299:     do_put_mem_long(NEXTRam + addr, l);
        !           300: }
        !           301: 
        !           302: static void NEXTmem_wput(uaecptr addr, uae_u32 w)
        !           303: {
        !           304:     addr &= NEXTmem_mask;
        !           305:     do_put_mem_word(NEXTRam + addr, w);
        !           306: }
        !           307: 
        !           308: static void NEXTmem_bput(uaecptr addr, uae_u32 b)
        !           309: {
        !           310:     addr &= NEXTmem_mask;
        !           311:     NEXTRam[addr] = b;
        !           312: }
        !           313: 
        !           314: static int NEXTmem_check(uaecptr addr, uae_u32 size)
        !           315: {
        !           316:     addr &= NEXTmem_mask;
        !           317:     return (addr + size) <= 0x003FFFFF;
        !           318: }
        !           319: 
        !           320: static uae_u8 *NEXTmem_xlate(uaecptr addr)
        !           321: {
        !           322:     addr &= NEXTmem_mask;
        !           323:     return NEXTRam + addr;
        !           324: }
        !           325: 
        !           326: /* bank2 */
        !           327: 
        !           328: static uae_u32 NEXTmem2_lget(uaecptr addr)
        !           329: {
        !           330:     addr &= NEXTmem_mask;
        !           331:     return do_get_mem_long(NEXTRam + 0x00400000 + addr);
        !           332: }
        !           333: 
        !           334: static uae_u32 NEXTmem2_wget(uaecptr addr)
        !           335: {
        !           336:     addr &= NEXTmem_mask;
        !           337:     return do_get_mem_word(NEXTRam + 0x00400000 + addr);
        !           338: }
        !           339: 
        !           340: static uae_u32 NEXTmem2_bget(uaecptr addr)
        !           341: {
        !           342:     addr &= NEXTmem_mask;
        !           343:     return NEXTRam[addr+0x00400000];
        !           344: }
        !           345: 
        !           346: static void NEXTmem2_lput(uaecptr addr, uae_u32 l)
        !           347: {
        !           348:     addr &= NEXTmem_mask;
        !           349:     do_put_mem_long(NEXTRam + addr + 0x00400000, l);
        !           350: }
        !           351: 
        !           352: static void NEXTmem2_wput(uaecptr addr, uae_u32 w)
        !           353: {
        !           354:     addr &= NEXTmem_mask;
        !           355:     do_put_mem_word(NEXTRam + addr + 0x00400000, w);
        !           356: }
        !           357: 
        !           358: static void NEXTmem2_bput(uaecptr addr, uae_u32 b)
        !           359: {
        !           360:     addr &= NEXTmem_mask;
        !           361:     NEXTRam[addr+0x00400000] = b;
        !           362: }
        !           363: 
        !           364: static int NEXTmem2_check(uaecptr addr, uae_u32 size)
        !           365: {
        !           366:     addr &= NEXTmem_mask;
        !           367:     return (addr + size) <= 0x003FFFFF;
        !           368: }
        !           369: 
        !           370: static uae_u8 *NEXTmem2_xlate(uaecptr addr)
        !           371: {
        !           372:     addr &= NEXTmem_mask;
        !           373:     return NEXTRam + addr + 0x00400000;
        !           374: }
        !           375: 
        !           376: 
        !           377: /* **** NEXT VRAM memory **** */
        !           378: 
        !           379: static uae_u32 NEXTvideo_lget(uaecptr addr)
        !           380: {
        !           381:     addr &= NEXTvideo_mask;
        !           382:     return do_get_mem_long(NEXTVideo + addr);
        !           383: }
        !           384: 
        !           385: static uae_u32 NEXTvideo_wget(uaecptr addr)
        !           386: {
        !           387:     addr &= NEXTvideo_mask;
        !           388:     return do_get_mem_word(NEXTVideo + addr);
        !           389: }
        !           390: 
        !           391: static uae_u32 NEXTvideo_bget(uaecptr addr)
        !           392: {
        !           393:     addr &= NEXTvideo_mask;
        !           394:     return NEXTVideo[addr];
        !           395: }
        !           396: 
        !           397: static void NEXTvideo_lput(uaecptr addr, uae_u32 l)
        !           398: {
        !           399:     addr &= NEXTvideo_mask;
        !           400:     do_put_mem_long(NEXTVideo + addr, l);
        !           401: }
        !           402: 
        !           403: static void NEXTvideo_wput(uaecptr addr, uae_u32 w)
        !           404: {
        !           405:     addr &= NEXTvideo_mask;
        !           406:     do_put_mem_word(NEXTVideo + addr, w);
        !           407: }
        !           408: 
        !           409: static void NEXTvideo_bput(uaecptr addr, uae_u32 b)
        !           410: {
        !           411:     addr &= NEXTvideo_mask;
        !           412:     NEXTVideo[addr] = b;
        !           413: }
        !           414: 
        !           415: static int NEXTvideo_check(uaecptr addr, uae_u32 size)
        !           416: {
        !           417:     addr &= NEXTvideo_mask;
        !           418:     return (addr + size) <= NEXTvideo_size;
        !           419: }
        !           420: 
        !           421: static uae_u8 *NEXTvideo_xlate(uaecptr addr)
        !           422: {
        !           423:     addr &= NEXTvideo_mask;
        !           424:     return (uae_u8*)NEXTVideo + addr;
        !           425: }
        !           426: 
        !           427: /* **** NEXT BMAP memory **** */
        !           428: 
        !           429: static uae_u32 NEXTbmap_lget(uaecptr addr)
        !           430: {
        !           431:        write_log ("bmap lget at %08lx PC=%08x\n", (long)addr,m68k_getpc());
        !           432:     addr &= NEXTbmap_mask;
        !           433:     return do_get_mem_long(NEXTbmap + addr);
        !           434: }
        !           435: 
        !           436: static uae_u32 NEXTbmap_wget(uaecptr addr)
        !           437: {
        !           438:        write_log ("bmap wget at %08lx PC=%08x\n", (long)addr,m68k_getpc());
        !           439:     addr &= NEXTbmap_mask;
        !           440:     return do_get_mem_word(NEXTbmap + addr);
        !           441: }
        !           442: 
        !           443: static uae_u32 NEXTbmap_bget(uaecptr addr)
        !           444: {
        !           445:        write_log ("bmap bget at %08lx PC=%08x\n", (long)addr,m68k_getpc());
        !           446:     addr &= NEXTbmap_mask;
        !           447:     return NEXTbmap[addr];
        !           448: }
        !           449: 
        !           450: static void NEXTbmap_lput(uaecptr addr, uae_u32 l)
        !           451: {
        !           452:        write_log ("bmap lput at %08lx val=%x PC=%08x\n", (long)addr,l,m68k_getpc());
        !           453:     addr &= NEXTbmap_mask;
        !           454:     do_put_mem_long(NEXTbmap + addr, l);
        !           455: }
        !           456: 
        !           457: static void NEXTbmap_wput(uaecptr addr, uae_u32 w)
        !           458: {
        !           459:        write_log ("bmap wput at %08lx val=%x PC=%08x\n", (long)addr,w,m68k_getpc());
        !           460:     addr &= NEXTbmap_mask;
        !           461:     do_put_mem_word(NEXTbmap + addr, w);
        !           462: }
        !           463: 
        !           464: static void NEXTbmap_bput(uaecptr addr, uae_u32 b)
        !           465: {
        !           466:        write_log ("bmap bput at %08lx val=%x PC=%08x\n", (long)addr,b,m68k_getpc());
        !           467:     addr &= NEXTbmap_mask;
        !           468:     NEXTbmap[addr] = b;
        !           469: }
        !           470: 
        !           471: static int NEXTbmap_check(uaecptr addr, uae_u32 size)
        !           472: {
        !           473:     addr &= NEXTbmap_mask;
        !           474:     return (addr + size) <= NEXTbmap_size;
        !           475: }
        !           476: 
        !           477: static uae_u8 *NEXTbmap_xlate(uaecptr addr)
        !           478: {
        !           479:     addr &= NEXTbmap_mask;
        !           480:     return (uae_u8*)NEXTbmap + addr;
        !           481: }
        !           482: 
        !           483: /* **** NEXT x06 memory **** */
        !           484: 
        !           485: static uae_u32 NEXTx06_lget(uaecptr addr)
        !           486: {
        !           487:        write_log ("x06 lget at %08lx PC=%08x\n", (long)addr,m68k_getpc());
        !           488:     addr &= NEXTx06_mask;
        !           489: //    return do_get_mem_long(NEXTx06 + addr);
        !           490:        return 0xFFFFFFFF;
        !           491: }
        !           492: 
        !           493: static uae_u32 NEXTx06_wget(uaecptr addr)
        !           494: {
        !           495:        write_log ("x06 wget at %08lx PC=%08x\n", (long)addr,m68k_getpc());
        !           496:     addr &= NEXTx06_mask;
        !           497: //    return do_get_mem_word(NEXTx06 + addr);
        !           498:        return 0xFFFF;
        !           499: }
        !           500: 
        !           501: static uae_u32 NEXTx06_bget(uaecptr addr)
        !           502: {
        !           503:        write_log ("x06 bget at %08lx PC=%08x\n", (long)addr,m68k_getpc());
        !           504:     addr &= NEXTx06_mask;
        !           505: //    return NEXTx06[addr];
        !           506:        return 0xFF;
        !           507: }
        !           508: 
        !           509: static void NEXTx06_lput(uaecptr addr, uae_u32 l)
        !           510: {
        !           511:        write_log ("x06 lput at %08lx val=%x PC=%08x\n", (long)addr,l,m68k_getpc());
        !           512:     addr &= NEXTx06_mask;
        !           513:     do_put_mem_long(NEXTx06 + addr, l);
        !           514: }
        !           515: 
        !           516: static void NEXTx06_wput(uaecptr addr, uae_u32 w)
        !           517: {
        !           518:        write_log ("x06 wput at %08lx val=%x PC=%08x\n", (long)addr,w,m68k_getpc());
        !           519:     addr &= NEXTx06_mask;
        !           520:     do_put_mem_word(NEXTx06 + addr, w);
        !           521: }
        !           522: 
        !           523: static void NEXTx06_bput(uaecptr addr, uae_u32 b)
        !           524: {
        !           525:        write_log ("x06 bput at %08lx val=%x PC=%08x\n", (long)addr,b,m68k_getpc());
        !           526:     addr &= NEXTx06_mask;
        !           527:     NEXTx06[addr] = b;
        !           528: }
        !           529: 
        !           530: static int NEXTx06_check(uaecptr addr, uae_u32 size)
        !           531: {
        !           532:     addr &= NEXTx06_mask;
        !           533:     return (addr + size) <= NEXTx06_size;
        !           534: }
        !           535: 
        !           536: static uae_u8 *NEXTx06_xlate(uaecptr addr)
        !           537: {
        !           538:     addr &= NEXTx06_mask;
        !           539:     return (uae_u8*)NEXTx06 + addr;
        !           540: }
        !           541: 
        !           542: 
        !           543: /*
        !           544:  * **** Void memory ****
        !           545:  * lots of free space in next's full 32bits memory map
        !           546:  * Reading always returns the same value and writing does nothing at all.
        !           547:  */
        !           548: 
        !           549: static uae_u32 VoidMem_lget(uaecptr addr)
        !           550: {
        !           551:     return 0;
        !           552: }
        !           553: 
        !           554: static uae_u32 VoidMem_wget(uaecptr addr)
        !           555: {
        !           556:     return 0;
        !           557: }
        !           558: 
        !           559: static uae_u32 VoidMem_bget(uaecptr addr)
        !           560: {
        !           561:     return 0;
        !           562: }
        !           563: 
        !           564: static void VoidMem_lput(uaecptr addr, uae_u32 l)
        !           565: {
        !           566: }
        !           567: 
        !           568: static void VoidMem_wput(uaecptr addr, uae_u32 w)
        !           569: {
        !           570: }
        !           571: 
        !           572: static void VoidMem_bput (uaecptr addr, uae_u32 b)
        !           573: {
        !           574: }
        !           575: 
        !           576: static int VoidMem_check(uaecptr addr, uae_u32 size)
        !           577: {
        !           578:     if (illegal_mem)
        !           579:        write_log ("Void memory check at %08lx\n", (long)addr);
        !           580: 
        !           581:     return 0;
        !           582: }
        !           583: 
        !           584: static uae_u8 *VoidMem_xlate (uaecptr addr)
        !           585: {
        !           586:     write_log("Your Next program just did something terribly stupid:"
        !           587:               " VoidMem_xlate($%x)\n", addr);
        !           588: 
        !           589:     return NEXTmem_xlate(addr);  /* So we don't crash. */
        !           590: }
        !           591: 
        !           592: 
        !           593: 
        !           594: /* **** ROM memory **** */
        !           595: 
        !           596: uae_u8 *ROMmemory;
        !           597: 
        !           598: static uae_u32 ROMmem_lget(uaecptr addr)
        !           599: {
        !           600:     addr &= ROMmem_mask;
        !           601:     return do_get_mem_long(ROMmemory + addr);
        !           602: }
        !           603: 
        !           604: static uae_u32 ROMmem_wget(uaecptr addr)
        !           605: {
        !           606:     addr &= ROMmem_mask;
        !           607:     return do_get_mem_word(ROMmemory + addr);
        !           608: }
        !           609: 
        !           610: static uae_u32 ROMmem_bget(uaecptr addr)
        !           611: {
        !           612:     addr &= ROMmem_mask;
        !           613:     return ROMmemory[addr];
        !           614: }
        !           615: 
        !           616: static void ROMmem_lput(uaecptr addr, uae_u32 b)
        !           617: {
        !           618:     if (illegal_mem)
        !           619:        write_log ("Illegal ROMmem lput at %08lx\n", (long)addr);
        !           620: 
        !           621:     M68000_BusError(addr, 0);
        !           622: }
        !           623: 
        !           624: static void ROMmem_wput(uaecptr addr, uae_u32 b)
        !           625: {
        !           626:     if (illegal_mem)
        !           627:        write_log ("Illegal ROMmem wput at %08lx\n", (long)addr);
        !           628: 
        !           629:     M68000_BusError(addr, 0);
        !           630: }
        !           631: 
        !           632: static void ROMmem_bput(uaecptr addr, uae_u32 b)
        !           633: {
        !           634:     if (illegal_mem)
        !           635:        write_log ("Illegal ROMmem bput at %08lx\n", (long)addr);
        !           636: 
        !           637:     M68000_BusError(addr, 0);
        !           638: }
        !           639: 
        !           640: static int ROMmem_check(uaecptr addr, uae_u32 size)
        !           641: {
        !           642:     addr &= ROMmem_mask;
        !           643:     return (addr + size) <= ROMmem_size;
        !           644: }
        !           645: 
        !           646: static uae_u8 *ROMmem_xlate(uaecptr addr)
        !           647: {
        !           648:     addr &= ROMmem_mask;
        !           649:     return ROMmemory + addr;
        !           650: }
        !           651: 
        !           652: /* Hardware IO memory */
        !           653: /* see also ioMem.c */
        !           654: 
        !           655: uae_u8 *IOmemory;
        !           656: 
        !           657: static int IOmem_check(uaecptr addr, uae_u32 size)
        !           658: {
        !           659:     addr &= IOmem_mask;
        !           660:     return (addr + size) <= IOmem_size;
        !           661: }
        !           662: 
        !           663: static uae_u8 *IOmem_xlate(uaecptr addr)
        !           664: {
        !           665:     addr &= IOmem_mask;
        !           666:     return IOmemory + addr;
        !           667: }
        !           668: 
        !           669: 
        !           670: /* **** Address banks **** */
        !           671: 
        !           672: static addrbank dummy_bank =
        !           673: {
        !           674:     dummy_lget, dummy_wget, dummy_bget,
        !           675:     dummy_lput, dummy_wput, dummy_bput,
        !           676:     dummy_xlate, dummy_check
        !           677: };
        !           678: 
        !           679: static addrbank BusErrMem_bank =
        !           680: {
        !           681:     BusErrMem_lget, BusErrMem_wget, BusErrMem_bget,
        !           682:     BusErrMem_lput, BusErrMem_wput, BusErrMem_bput,
        !           683:     BusErrMem_xlate, BusErrMem_check
        !           684: };
        !           685: 
        !           686: static addrbank NEXTmem_bank =
        !           687: {
        !           688:     NEXTmem_lget, NEXTmem_wget, NEXTmem_bget,
        !           689:     NEXTmem_lput, NEXTmem_wput, NEXTmem_bput,
        !           690:     NEXTmem_xlate, NEXTmem_check
        !           691: };
        !           692: 
        !           693: static addrbank NEXTmem_bank2 =
        !           694: {
        !           695:     NEXTmem2_lget, NEXTmem2_wget, NEXTmem2_bget,
        !           696:     NEXTmem2_lput, NEXTmem2_wput, NEXTmem2_bput,
        !           697:     NEXTmem2_xlate, NEXTmem2_check
        !           698: };
        !           699: 
        !           700: static addrbank VoidMem_bank =
        !           701: {
        !           702:     VoidMem_lget, VoidMem_wget, VoidMem_bget,
        !           703:     VoidMem_lput, VoidMem_wput, VoidMem_bput,
        !           704:     VoidMem_xlate, VoidMem_check
        !           705: };
        !           706: 
        !           707: static addrbank Video_bank =
        !           708: {
        !           709:     NEXTvideo_lget, NEXTvideo_wget, NEXTvideo_bget,
        !           710:     NEXTvideo_lput, NEXTvideo_wput, NEXTvideo_bput,
        !           711:     NEXTvideo_xlate, NEXTvideo_check
        !           712: };
        !           713: 
        !           714: static addrbank bmap_bank =
        !           715: {
        !           716:     NEXTbmap_lget, NEXTbmap_wget, NEXTbmap_bget,
        !           717:     NEXTbmap_lput, NEXTbmap_wput, NEXTbmap_bput,
        !           718:     NEXTbmap_xlate, NEXTbmap_check
        !           719: };
        !           720: 
        !           721: static addrbank x06_bank =
        !           722: {
        !           723:     NEXTx06_lget, NEXTx06_wget, NEXTx06_bget,
        !           724:     NEXTx06_lput, NEXTx06_wput, NEXTx06_bput,
        !           725:     NEXTx06_xlate, NEXTx06_check
        !           726: };
        !           727: 
        !           728: static addrbank ROMmem_bank =
        !           729: {
        !           730:     ROMmem_lget, ROMmem_wget, ROMmem_bget,
        !           731:     ROMmem_lput, ROMmem_wput, ROMmem_bput,
        !           732:     ROMmem_xlate, ROMmem_check
        !           733: };
        !           734: 
        !           735: static addrbank IOmem_bank =
        !           736: {
        !           737:     IoMem_lget, IoMem_wget, IoMem_bget,
        !           738:     IoMem_lput, IoMem_wput, IoMem_bput,
        !           739:     IOmem_xlate, IOmem_check
        !           740: };
        !           741: 
        !           742: 
        !           743: 
        !           744: 
        !           745: static void init_mem_banks (void)
        !           746: {
        !           747:     int i;
        !           748:     for (i = 0; i < 65536; i++)
        !           749:        put_mem_bank (i<<16, &dummy_bank);
        !           750: }
        !           751: 
        !           752: 
        !           753: /*
        !           754:  * Initialize the memory banks
        !           755:  */
        !           756: void memory_init(uae_u32 nNewNEXTMemSize)
        !           757: {
        !           758:     NEXTmem_size = (nNewNEXTMemSize + 65535) & 0xFFFF0000;
        !           759: 
        !           760:     write_log("memory_init: NEXTmem_size=$%x\n",
        !           761:               nNewNEXTMemSize);
        !           762: 
        !           763:        /* fill every 65536 bank with dummy */
        !           764:     init_mem_banks(); 
        !           765: 
        !           766:     // map_banks(&BusErrMem_bank,NEXT_RAM_START>>16,NEXT_RAM_SPACE>>16);
        !           767: 
        !           768:     map_banks(&NEXTmem_bank, NEXT_RAM_START>>16, NEXT_RAM_SIZE >> 16);
        !           769: 
        !           770:     // map_banks(&NEXTmem_bank2, NEXT_RAM_START2>>16, NEXT_RAM_SIZE2 >> 16);
        !           771: 
        !           772: 
        !           773:     map_banks(&Video_bank, NEXT_SCREEN>>16, NEXT_SCREEN_SIZE >> 16);
        !           774:     map_banks(&Video_bank, NEXT_SCREEN>>16, NEXT_SCREEN_SIZE >> 16);
        !           775:     map_banks(&Video_bank, NEXT_SCREEN>>16, NEXT_SCREEN_SIZE >> 16);
        !           776:     map_banks(&Video_bank, NEXT_SCREEN>>16, NEXT_SCREEN_SIZE >> 16);
        !           777: 
        !           778:     map_banks(&ROMmem_bank, NEXT_EPROM_START >> 16, NEXT_EPROM_SIZE>>16);
        !           779:     map_banks(&ROMmem_bank, NEXT_EPROM2_START >> 16, NEXT_EPROM_SIZE>>16);
        !           780: 
        !           781: 
        !           782:     map_banks(&IOmem_bank, NEXT_IO_START >> 16, NEXT_IO_SIZE>>16);
        !           783:     map_banks(&IOmem_bank, NEXT_IO2_START >> 16, NEXT_IO_SIZE>>16);
        !           784: //     map_banks(&VoidMem_bank, NEXT_IO_START >> 16, NEXT_IO_SIZE>>16);
        !           785: //    map_banks(&VoidMem_bank, NEXT_IO2_START >> 16, NEXT_IO_SIZE>>16);
        !           786: 
        !           787:     map_banks(&bmap_bank, NEXT_BMAP_START >> 16, NEXT_BMAP_SIZE>>16);
        !           788: //    map_banks(&x06_bank, NEXT_X06_START >> 16, NEXT_X06_SIZE>>16);
        !           789: //    map_banks(&x06_bank, 0x07000000 >> 16, NEXT_X06_SIZE>>16);
        !           790: 
        !           791:        ROMmemory=NEXTRom;
        !           792:        IOmemory=NEXTIo;
        !           793:        {
        !           794:                FILE* fin;
        !           795:                int ret;
        !           796:                fin=fopen("./Rev_2.5_v66.BIN","rb");
        !           797: //             fin=fopen("./Rev_3.3_v74.BIN","rb");
        !           798: //             fin=fopen("./Rev_1.2.BIN","rb");
        !           799: //             fin=fopen("./Rev_1.0_v41.BIN","rb");
        !           800:                ret=fread(ROMmemory,1,0x20000,fin);
        !           801: 
        !           802:                write_log("Read ROM %d\n",ret);
        !           803:                fclose(fin);
        !           804:        }
        !           805:        
        !           806:        {
        !           807:                int i;
        !           808:                for (i=0;i<sizeof(NEXTVideo);i++) NEXTVideo[i]=0xAA;
        !           809:                for (i=0;i<sizeof(NEXTRam);i++) NEXTRam[i]=0xAA;
        !           810:        }
        !           811: 
        !           812: }
        !           813: 
        !           814: 
        !           815: /*
        !           816:  * Uninitialize the memory banks.
        !           817:  */
        !           818: void memory_uninit (void)
        !           819: {
        !           820: }
        !           821: 
        !           822: 
        !           823: void map_banks (addrbank *bank, int start, int size)
        !           824: {
        !           825:     int bnr;
        !           826:     unsigned long int hioffs = 0, endhioffs = 0x100;
        !           827: 
        !           828:        for (bnr = start; bnr < start + size; bnr++)
        !           829:            put_mem_bank (bnr << 16, bank);
        !           830:        return;
        !           831: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.