Annotation of previous/src/uae-cpu/memory.c, revision 1.1.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.