|
|
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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.