@@ -16,12 +16,11 @@ type rtc struct {
16
16
}
17
17
18
18
type mbc3 struct {
19
- c * Cartridge
20
- ramEnabled bool
21
- romBank uint
22
- ramBank uint
23
- rtc rtc
24
- ramBankMax uint
19
+ c * Cartridge
20
+ ramEnabled bool
21
+ romBank , ramBank uint8
22
+ rtc rtc
23
+ ramBankMax uint8
25
24
}
26
25
27
26
func newMBC3 (c * Cartridge ) mbc {
@@ -39,19 +38,19 @@ func newMBC3(c *Cartridge) mbc {
39
38
// ポケモンクリスタルなどは、MBC30と呼ばれる特殊なMBC3を使っている
40
39
// これを見分ける方法は今のところ、カートリッジヘッダのROMサイズとRAMサイズを見るしかない
41
40
func (m * mbc3 ) isMBC30 () bool {
42
- return (len (m .c .rom ) > int (2 * MB )) || (len (m .c .ram ) > int (32 * KB ))
41
+ return (len (m .c .ROM ) > int (2 * MB )) || (len (m .c .ram ) > int (32 * KB ))
43
42
}
44
43
45
44
func (m * mbc3 ) read (addr uint16 ) uint8 {
46
45
switch addr >> 12 {
47
46
case 0x0 , 0x1 , 0x2 , 0x3 :
48
- return m .c .rom [addr & 0x3FFF ]
47
+ return m .c .ROM [addr & 0x3FFF ]
49
48
case 0x4 , 0x5 , 0x6 , 0x7 :
50
- return m .c .rom [( m .romBank << 14 )| uint (addr & 0x3FFF )]
49
+ return m .c .ROM [( uint ( m .romBank ) << 14 )| uint (addr & 0x3FFF )]
51
50
case 0xA , 0xB :
52
51
if m .ramEnabled {
53
52
if m .ramBank < m .ramBankMax {
54
- return m .c .ram [(m .ramBank << 13 )| uint (addr & 0x1FFF )]
53
+ return m .c .ram [(uint ( m .ramBank ) << 13 )| uint (addr & 0x1FFF )]
55
54
}
56
55
57
56
// RTC
@@ -81,16 +80,16 @@ func (m *mbc3) write(addr uint16, val uint8) {
81
80
case 0x0 , 0x1 :
82
81
m .ramEnabled = (val & 0x0F == 0x0A )
83
82
case 0x2 , 0x3 :
84
- m .romBank = uint (val & 0b111_1111 )
83
+ m .romBank = (val & 0b111_1111 )
85
84
if m .isMBC30 () {
86
- m .romBank = uint ( val )
85
+ m .romBank = val
87
86
}
88
87
if m .romBank == 0 {
89
88
m .romBank = 1
90
89
}
91
90
case 0x4 , 0x5 :
92
91
if val <= 0x0C {
93
- m .ramBank = uint ( val )
92
+ m .ramBank = val
94
93
}
95
94
case 0x6 , 0x7 :
96
95
// 現在のRTCの値をlatch(保存), これで特定の瞬間のRTCの値を取得できる
@@ -99,7 +98,7 @@ func (m *mbc3) write(addr uint16, val uint8) {
99
98
case 0xA , 0xB :
100
99
if m .ramEnabled {
101
100
if m .ramBank < m .ramBankMax {
102
- m .c .ram [(m .ramBank << 13 )| uint (addr & 0x1FFF )] = val
101
+ m .c .ram [(uint ( m .ramBank ) << 13 )| uint (addr & 0x1FFF )] = val
103
102
} else {
104
103
switch m .ramBank {
105
104
case 0xC :
0 commit comments