|
-
- var Memory = require('chip/memory');
-
- class Bank{
- constructor(mem){
- this.__mem = [mem];
- this.__idx = 0;
- }
-
- get mem(){return this.__mem[this.__idx];}
-
- get idx(){return this.__idx;}
- set idx(i){
- if (i >= 0 && i < this.__mem.length)
- this.__idx = i;
- }
-
- addMemModule(mem){
- if (!(mem instanceof Memory))
- throw new ValueError("Only Memory instances can be added to MMC Banks.");
- if (this.__mem.length >= 4)
- throw new RangeError("Bank handling maximum memory modules.");
- if (this.__mem.length > 0 && mem.size !== this.__mem[0].size)
- throw new RangeError("Memory module does not match size of already connected memory modules on this bank.");
- this.__mem.push(mem);
- }
- }
-
- class MMC{
- constructor(){
- this.__banks = [];
- }
-
- get size(){
- return this.__banks.reduce((acc, b)=>{
- acc += b.mem.size;
- }, 0);
- }
-
- get banks(){return this.__banks.length;}
-
- // TODO: Add a get/set for the memory address. This should handle banking and memory address offsets.
- // TODO: Add a get/set for memory data at the current address.
- // TODO: Add method for adding memory modules}
- // TODO: Add a connection between a memory address and the triggering of bank switching.
- }
-
- module.exports = MMC;
|