Annotation of uae/include/memory.h, revision 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.