Class: Rubyboy::Cartridge::Mbc1

Inherits:
Object
  • Object
show all
Defined in:
lib/rubyboy/cartridge/mbc1.rb

Instance Method Summary collapse

Constructor Details

#initialize(rom, ram) ⇒ Mbc1



6
7
8
9
10
11
12
13
# File 'lib/rubyboy/cartridge/mbc1.rb', line 6

def initialize(rom, ram)
  @rom = rom
  @ram = ram
  @rom_bank = 1
  @ram_bank = 0
  @ram_enable = false
  @ram_banking_mode = false
end

Instance Method Details

#read_byte(addr) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/rubyboy/cartridge/mbc1.rb', line 15

def read_byte(addr)
  case (addr >> 12)
  when 0x0, 0x1, 0x2, 0x3
    @rom.data[addr]
  when 0x4, 0x5, 0x6, 0x7
    @rom.data[addr + ((@rom_bank - 1) << 14)]
  when 0xa, 0xb
    if @ram_enable
      if @ram_banking_mode
        @ram.eram[addr - 0xa000 + (@ram_bank << 11)]
      else
        @ram.eram[addr - 0xa000]
      end
    else
      0xff
    end
  end
end

#write_byte(addr, value) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/rubyboy/cartridge/mbc1.rb', line 34

def write_byte(addr, value)
  case addr >> 12
  when 0x0, 0x1
    @ram_enable = value & 0x0f == 0x0a
  when 0x2, 0x3
    @rom_bank = value & 0x1f
    @rom_bank = 1 if @rom_bank == 0
  when 0x4, 0x5
    @ram_bank = value & 0x03
  when 0x6, 0x7
    @ram_banking_mode = value & 0x01 == 0x01
  when 0xa, 0xb
    if @ram_enable
      if @ram_banking_mode
        @ram.eram[addr - 0xa000 + (@ram_bank << 11)] = value
      else
        @ram.eram[addr - 0xa000] = value
      end
    end
  end
end