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