Annotation of uae/include/memory.h, revision 1.1.1.1

1.1       root        1:  /* 
                      2:   * UAE - The Un*x Amiga Emulator
                      3:   * 
                      4:   * memory management
                      5:   * 
                      6:   * (c) 1995 Bernd Schmidt
                      7:   */
                      8: 
                      9: #ifdef DUALCPU
                     10: extern bool allowmem;
                     11: extern bool incpu;
                     12: extern bool customacc;
                     13: extern ULONG mempattern;
                     14: extern int memlogptr;
                     15: #endif
                     16: 
                     17: #define chipmem_size 0x200000
                     18: #define fastmem_size 0
                     19: #define bogomem_size 0x80000 /* C00000 crap mem */
                     20: #define kickmem_size 0x80000
                     21: 
                     22: #define chipmem_start 0
                     23: #define fastmem_start 0x200000
                     24: #define bogomem_start 0xC00000 
                     25: #define kickmem_start 0xF80000
                     26: 
                     27: typedef ULONG (*lget_func)(CPTR) REGPARAM;
                     28: typedef UWORD (*wget_func)(CPTR) REGPARAM;
                     29: typedef UBYTE (*bget_func)(CPTR) REGPARAM;
                     30: typedef void (*lput_func)(CPTR,ULONG) REGPARAM;
                     31: typedef void (*wput_func)(CPTR,UWORD) REGPARAM;
                     32: typedef void (*bput_func)(CPTR,UBYTE) REGPARAM;
                     33: typedef UWORD *(*xlate_func)(CPTR) REGPARAM;
                     34: typedef bool (*check_func)(CPTR, ULONG) REGPARAM;
                     35: 
                     36: typedef struct {
                     37:     lget_func lget;
                     38:     wget_func wget;
                     39:     bget_func bget;
                     40:     lput_func lput;
                     41:     wput_func wput;
                     42:     bput_func bput;
                     43:     xlate_func xlateaddr;
                     44:     check_func check;
                     45: } addrbank;
                     46: 
                     47: extern addrbank chipmem_bank;
                     48: extern addrbank kickmem_bank;
                     49: extern addrbank custom_bank;
                     50: extern addrbank clock_bank;
                     51: extern addrbank cia_bank;
                     52: extern addrbank rtarea_bank;
                     53: 
                     54: extern void rtarea_init (void);
                     55: 
                     56: /* Default memory access functions */
                     57: 
                     58: extern bool default_check(CPTR addr, ULONG size) REGPARAM;
                     59: extern UWORD *default_xlate(CPTR addr) REGPARAM;
                     60: 
                     61: extern lget_func do_lget[256];
                     62: extern wget_func do_wget[256];
                     63: extern bget_func do_bget[256];
                     64: extern lput_func do_lput[256];
                     65: extern wput_func do_wput[256];
                     66: extern bput_func do_bput[256];
                     67: extern xlate_func do_xlateaddr[256];
                     68: extern check_func do_check[256];
                     69: 
                     70: static __inline__ int bankindex(CPTR a)
                     71: {
                     72: #ifdef HAVE_BROKEN_SOFTWARE
                     73:     return (a>>16) & 0xFF;
                     74: #else
                     75:     return a>>16;
                     76: #endif
                     77: }
                     78: 
                     79: static __inline__ ULONG longget(CPTR addr)
                     80: {
                     81:     return do_lget[bankindex(addr)](addr);
                     82: }
                     83: static __inline__ UWORD wordget(CPTR addr)
                     84: {
                     85:     return do_wget[bankindex(addr)](addr);
                     86: }
                     87: static __inline__ UBYTE byteget(CPTR addr) 
                     88: {
                     89:     return do_bget[bankindex(addr)](addr);
                     90: }
                     91: static __inline__ void longput(CPTR addr, ULONG l)
                     92: {
                     93:     do_lput[bankindex(addr)](addr, l);
                     94: }
                     95: static __inline__ void wordput(CPTR addr, UWORD w)
                     96: {
                     97:     do_wput[bankindex(addr)](addr, w);
                     98: }
                     99: static __inline__ void byteput(CPTR addr, UBYTE b)
                    100: {
                    101:     do_bput[bankindex(addr)](addr, b);
                    102: }
                    103: 
                    104: static __inline__ bool check_addr(CPTR a)
                    105: {
                    106: #ifdef NO_EXCEPTION_3
                    107:     return true;
                    108: #else
                    109:     return (a & 1) == 0;
                    110: #endif
                    111: }
                    112: extern bool buserr;
                    113:     
                    114: extern void memory_init(void);    
                    115: extern void map_banks(addrbank bank, int first, int count);
                    116:     
                    117: #ifdef DUALCPU    
                    118: extern ULONG get_long(CPTR addr);
                    119: extern UWORD get_word(CPTR addr);
                    120: extern UBYTE get_byte(CPTR addr);
                    121: extern void put_long(CPTR a,ULONG l);
                    122: extern void put_word(CPTR a,UWORD w);
                    123: extern void put_byte(CPTR a,UBYTE b);
                    124: #else
                    125: static __inline__ ULONG get_long(CPTR addr) 
                    126: {
                    127:     if (check_addr(addr))
                    128:        return longget(addr);
                    129:     buserr = true;
                    130:     return 0;
                    131: }
                    132: static __inline__ UWORD get_word(CPTR addr) 
                    133: {
                    134:     if (check_addr(addr))
                    135:        return wordget(addr);
                    136:     buserr = true;
                    137:     return 0;
                    138: }
                    139: static __inline__ UBYTE get_byte(CPTR addr) 
                    140: {
                    141:     return byteget(addr); 
                    142: }
                    143: static __inline__ void put_long(CPTR addr, ULONG l) 
                    144: {
                    145:     if (!check_addr(addr))
                    146:        buserr = true;
                    147:     longput(addr, l);
                    148: }
                    149: static __inline__ void put_word(CPTR addr, UWORD w) 
                    150: {
                    151:     if (!check_addr(addr))
                    152:        buserr = true;
                    153:     wordput(addr, w);
                    154: }
                    155: static __inline__ void put_byte(CPTR addr, UBYTE b) 
                    156: {
                    157:     byteput(addr, b);
                    158: }
                    159: #endif
                    160: 
                    161: static __inline__ UWORD *get_real_address(CPTR addr)
                    162: {
                    163:     if (!check_addr(addr))
                    164:        buserr = true;
                    165:     return do_xlateaddr[bankindex(addr)](addr);
                    166: }
                    167: 
                    168: static __inline__ bool valid_address(CPTR addr, ULONG size)
                    169: {
                    170:     if (!check_addr(addr))
                    171:        buserr = true;
                    172:     return do_check[bankindex(addr)](addr, size);
                    173: }

unix.superglobalmegacorp.com

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