mirror of
https://github.com/colby-swandale/waterfoul
synced 2024-12-26 21:58:54 +01:00
Let Cartridge.new return directly the memory bank controller
* Cartridge does not provide any extra behavior * Avoids one indirection for every access
This commit is contained in:
parent
8bdd6941ad
commit
89aaa3e2cb
1 changed files with 5 additions and 8 deletions
|
@ -16,29 +16,26 @@ module Waterfoul
|
||||||
# ninetndo logo, game title, manufacturer, rom size, ram size and more.
|
# ninetndo logo, game title, manufacturer, rom size, ram size and more.
|
||||||
#
|
#
|
||||||
class Cartridge
|
class Cartridge
|
||||||
extend Forwardable
|
|
||||||
# location byte in memory (physically located on cartrdige) that declares the type of cartrdige
|
# location byte in memory (physically located on cartrdige) that declares the type of cartrdige
|
||||||
CARTRIDGE_TYPE_MEM_LOC = 0x147
|
CARTRIDGE_TYPE_MEM_LOC = 0x147
|
||||||
# delegate any reads/writes to the memory bank controller
|
|
||||||
def_delegators :@mbc, :[], :[]=
|
|
||||||
|
|
||||||
def initialize(rom)
|
def self.new(rom)
|
||||||
# get cartridge type byte from game program
|
# get cartridge type byte from game program
|
||||||
cartridge_type = rom[CARTRIDGE_TYPE_MEM_LOC]
|
cartridge_type = rom[CARTRIDGE_TYPE_MEM_LOC]
|
||||||
# assign memory bank controller to cartridge
|
# return memory bank controller to cartridge
|
||||||
@mbc = cartrdige_controller cartridge_type, rom
|
cartrdige_controller cartridge_type, rom
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
# initialize the memory bank controller given the game program and the controller type
|
# initialize the memory bank controller given the game program and the controller type
|
||||||
def cartrdige_controller type, rom
|
def self.cartrdige_controller type, rom
|
||||||
controller_const(type).new rom
|
controller_const(type).new rom
|
||||||
end
|
end
|
||||||
|
|
||||||
# return the class constant that implements the behavior of the memory bank controller
|
# return the class constant that implements the behavior of the memory bank controller
|
||||||
# declared by the game cartridge
|
# declared by the game cartridge
|
||||||
def controller_const(type_byte)
|
def self.controller_const(type_byte)
|
||||||
case type_byte
|
case type_byte
|
||||||
when 0x00, 0x8, 0x9
|
when 0x00, 0x8, 0x9
|
||||||
MBC::ROM
|
MBC::ROM
|
||||||
|
|
Loading…
Reference in a new issue