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

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

unix.superglobalmegacorp.com

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