|
|
1.1 ! root 1: /* ! 2: * UAE - The Unusable Amiga Emulator ! 3: * ! 4: * memory management v0.1 ! 5: * ! 6: * (c) 1995 Bernd Schmidt ! 7: */ ! 8: ! 9: const int chipmem_size = 512; ! 10: const int fastmem_size = 0; ! 11: const int bogomem_size = 0; // C00000 crap mem ! 12: ! 13: class address64k { ! 14: public: ! 15: virtual UWORD wget(UWORD addr) = 0; ! 16: virtual void wput(UWORD addr, UWORD value) = 0; ! 17: virtual UBYTE bget(UWORD addr) = 0; ! 18: virtual void bput(UWORD addr, UBYTE value) = 0; ! 19: }; ! 20: ! 21: class ram64k: public address64k { ! 22: protected: ! 23: UWORD ram[32768]; ! 24: public: ! 25: virtual UWORD wget(UWORD addr); ! 26: virtual void wput(UWORD addr, UWORD value); ! 27: virtual UBYTE bget(UWORD addr); ! 28: virtual void bput(UWORD addr, UBYTE value); ! 29: }; ! 30: ! 31: class custom64k: public address64k { ! 32: struct cchipaddr { ! 33: UWORD (*get)(); ! 34: void (*put)(UWORD); ! 35: }; ! 36: static cchipaddr *cchiptable; ! 37: struct custom_func { ! 38: UWORD addr; ! 39: cchipaddr fptrs; ! 40: }; ! 41: static custom_func functable[]; ! 42: ! 43: public: ! 44: custom64k(); ! 45: virtual UWORD wget(UWORD addr); ! 46: virtual void wput(UWORD addr, UWORD value); ! 47: virtual UBYTE bget(UWORD addr); ! 48: virtual void bput(UWORD addr, UBYTE value); ! 49: }; ! 50: ! 51: class cia64k: public address64k { ! 52: public: ! 53: virtual UWORD wget(UWORD addr); ! 54: virtual void wput(UWORD addr, UWORD value); ! 55: virtual UBYTE bget(UWORD addr); ! 56: virtual void bput(UWORD addr, UBYTE value); ! 57: }; ! 58: ! 59: class amigamemory { ! 60: private: ! 61: address64k *banks[256]; // memory size is restricted to 16M ! 62: public: ! 63: amigamemory(); ! 64: ~amigamemory(); ! 65: ! 66: UWORD get_word(CPTR addr) { return banks[addr>>16]->wget(addr & 0xffff); } ! 67: UBYTE get_byte(CPTR addr) { return banks[addr>>16]->bget(addr & 0xffff); } ! 68: void put_word(CPTR a,UWORD w) { banks[a>>16]->wput(a & 0xffff, w); } ! 69: void put_byte(CPTR a,UBYTE b) { banks[a>>16]->bput(a & 0xffff, b); } ! 70: }; ! 71: ! 72: extern amigamemory mem;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.