Annotation of uae/memory.cc, revision 1.1

1.1     ! root        1:  /* 
        !             2:   * UAE - The Unusable Amiga Emulator
        !             3:   * 
        !             4:   * memory management v0.1
        !             5:   * v0.0: 950225 four simple functions to get/put bytes/words
        !             6:   * v0.1: 950228 made banks classes instead of 64k arrays to support
        !             7:   *              custom chips as well
        !             8:   *
        !             9:   * (c) 1995 Bernd Schmidt
        !            10:   */
        !            11: 
        !            12: #include <iostream.h>
        !            13: #include <fstream.h>
        !            14: 
        !            15: #include "amiga.h"
        !            16: #include "memory.h"
        !            17: 
        !            18: const char romfile[] = "kick.rom"; 
        !            19: 
        !            20: UWORD ram64k::wget(UWORD addr)
        !            21: {
        !            22:   return ram[addr>>1];
        !            23: }
        !            24: 
        !            25: UBYTE ram64k::bget(UWORD addr)
        !            26: {
        !            27:   return ram[addr>>1] >> (addr & 1 ? 0 : 8);
        !            28: }
        !            29: 
        !            30: void ram64k::wput(UWORD addr,UWORD value)
        !            31: {
        !            32:   ram[addr>>1] = value;
        !            33: }
        !            34: 
        !            35: void ram64k::bput(UWORD addr,UBYTE value)
        !            36: {
        !            37:   if (!(addr & 1)) {
        !            38:     ram[addr>>1] = (ram[addr>>1] & 0xff) | (((UWORD)value) << 8);
        !            39:   } else {
        !            40:     ram[addr>>1] = (ram[addr>>1] & 0xff00) | value;
        !            41:   }
        !            42: }
        !            43: 
        !            44: class rom64k: public ram64k {
        !            45:  public:
        !            46:   rom64k(ifstream &);
        !            47:   virtual void wput(UWORD addr, UWORD value) { /* READ ONLY */ };
        !            48:   virtual void bput(UWORD addr, UBYTE value) { /* READ ONLY */ };
        !            49: };
        !            50: 
        !            51: rom64k::rom64k(ifstream &romin)
        !            52: {
        !            53:   for (int i=0; i<32768; i++){
        !            54:     UWORD data = romin.get();
        !            55:     data = (data << 8) | romin.get();
        !            56:     ram[i] = data;
        !            57:   }
        !            58: }
        !            59: 
        !            60: amigamemory mem;
        !            61: 
        !            62: amigamemory::amigamemory()
        !            63: {
        !            64:   // init chipmem
        !            65:   
        !            66:   int bank = 0;
        !            67:   for(int i=0;i<chipmem_size;i+=64){
        !            68:     banks[bank++] = new ram64k; // allocate chipmem banks
        !            69:     cout << "got 64k chipmem\n";
        !            70:   }
        !            71:   for(int b2=bank;b2<256;b2++) {      // mirror the chipram everywhere, so
        !            72:     banks[b2] = banks[b2 % bank]; // that we don't have holes
        !            73:   }
        !            74: 
        !            75:   // init rom
        !            76:   ifstream romin(romfile);
        !            77:   for (bank = 0;bank<8;bank++){
        !            78:     cout << "got 64k rom\n";
        !            79:     banks[248+bank] = new rom64k(romin);
        !            80:   }
        !            81:   // init custom chips
        !            82:   banks[192] = new custom64k;
        !            83:   for (bank = 193; bank < 224; bank++) {
        !            84:     banks[bank] = banks[192];
        !            85:   }
        !            86:   // init CIA
        !            87:   banks[191] = new cia64k; 
        !            88:   cout << "Memory initialized OK\n";
        !            89: }
        !            90: 
        !            91: amigamemory::~amigamemory()
        !            92: {
        !            93:   
        !            94: }
        !            95: 

unix.superglobalmegacorp.com

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