Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 19 additions & 19 deletions lib/rubyboy/cartridge/mbc1.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ def initialize(rom, ram)
end

def set_methods
0xc000.times do |addr|
@read_methods[addr] =
case addr
when 0x0000..0x3fff then -> { @rom.data[addr] }
when 0x4000..0x7fff then -> { @rom.data[addr + (@rom_bank - 1) * 0x4000] }
when 0xa000..0xbfff
lambda do
0xc.times do |prefix|
@read_methods[prefix] =
case prefix
when 0x0..0x3 then ->(addr) { @rom.data[addr] }
when 0x4..0x7 then ->(addr) { @rom.data[addr + (@rom_bank - 1) * 0x4000] }
when 0xa..0xb
lambda do |addr|
if @ram_enable
if @ram_banking_mode
@ram.eram[addr - 0xa000 + @ram_bank * 0x800]
Expand All @@ -38,19 +38,19 @@ def set_methods
end
end

0xc000.times do |addr|
@write_methods[addr] =
case addr
when 0x0000..0x1fff then ->(value) { @ram_enable = value & 0x0f == 0x0a }
when 0x2000..0x3fff
lambda do |value|
0xc.times do |prefix|
@write_methods[prefix] =
case prefix
when 0x0..0x1 then ->(_addr, value) { @ram_enable = value & 0x0f == 0x0a }
when 0x2..0x3
lambda do |_addr, value|
@rom_bank = value & 0x1f
@rom_bank = 1 if @rom_bank == 0
end
when 0x4000..0x5fff then ->(value) { @ram_bank = value & 0x03 }
when 0x6000..0x7fff then ->(value) { @ram_banking_mode = value & 0x01 == 0x01 }
when 0xa000..0xbfff
lambda do |value|
when 0x4..0x5 then ->(_addr, value) { @ram_bank = value & 0x03 }
when 0x6..0x7 then ->(_addr, value) { @ram_banking_mode = value & 0x01 == 0x01 }
when 0xa..0xb
lambda do |addr, value|
if @ram_enable
if @ram_banking_mode
@ram.eram[addr - 0xa000 + @ram_bank * 0x800] = value
Expand All @@ -64,11 +64,11 @@ def set_methods
end

def read_byte(addr)
@read_methods[addr].call
@read_methods[addr >> 12].call(addr)
end

def write_byte(addr, value)
@write_methods[addr].call(value)
@write_methods[addr >> 12].call(addr, value)
end
end
end
Expand Down