~jazzva/fakenes/ubuntu

« back to all changes in this revision

Viewing changes to src/include/mmc/ffe_f3.h

  • Committer: Sasa Bodiroza
  • Date: 2007-08-15 05:37:49 UTC
  • Revision ID: jazzva@gmail.com-20070815053749-76l0xj66tzgt290p
Upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
 
 
3
/* Mapper #8 (FFE F3xxx). */
 
4
 
 
5
/* This mapper is fully supported. */
 
6
 
 
7
 
 
8
#include "mmc/shared.h"
 
9
 
 
10
 
 
11
static int ffe_f3_init (void);
 
12
 
 
13
static void ffe_f3_reset (void);
 
14
 
 
15
 
 
16
static void ffe_f3_save_state (PACKFILE *, int);
 
17
 
 
18
static void ffe_f3_load_state (PACKFILE *, int);
 
19
 
 
20
 
 
21
static const MMC mmc_ffe_f3 =
 
22
{
 
23
    8, "FFE F3xxx",
 
24
 
 
25
    ffe_f3_init, ffe_f3_reset,
 
26
 
 
27
 
 
28
    "FFE_F3\0\0",
 
29
 
 
30
    ffe_f3_save_state, ffe_f3_load_state
 
31
};
 
32
 
 
33
 
 
34
static UINT8 ffe_f3_last_write = 0;
 
35
 
 
36
 
 
37
#define FFE_F3_PRG_ROM_MASK     0xf8
 
38
 
 
39
#define FFE_F3_CHR_ROM_MASK     0x07
 
40
 
 
41
 
 
42
static void ffe_f3_write (UINT16 address, UINT8 value)
 
43
{
 
44
    int index;
 
45
 
 
46
 
 
47
    int chr_page;
 
48
 
 
49
    int prg_page;
 
50
 
 
51
 
 
52
    /* Store page #s for state saving. */
 
53
 
 
54
    ffe_f3_last_write = value;
 
55
 
 
56
 
 
57
    /* Extract ROM page # (xxxxx000). */
 
58
 
 
59
    prg_page = ((value & FFE_F3_PRG_ROM_MASK) >> 3);
 
60
 
 
61
 
 
62
    /* Select requested 16k ROM page at $8000. */
 
63
 
 
64
    cpu_set_read_address_16k_rom_block (0x8000, prg_page);
 
65
 
 
66
 
 
67
    /* Extract CHR-ROM page # (00000xxx). */
 
68
 
 
69
    chr_page = (value & FFE_F3_CHR_ROM_MASK);
 
70
 
 
71
 
 
72
    /* Convert 8k page # to 1k. */
 
73
 
 
74
    chr_page *= 8;
 
75
 
 
76
 
 
77
    /* Select requested 8k CHR-ROM page. */
 
78
 
 
79
    for (index = 0; index < 8; index ++)
 
80
    {
 
81
        ppu_set_ram_1k_pattern_vrom_block ((index << 10), (chr_page + index));
 
82
    }
 
83
}
 
84
 
 
85
 
 
86
static void ffe_f3_reset (void)
 
87
{
 
88
    int index;
 
89
 
 
90
 
 
91
    /* Note: Upper 16k ROM bank is hard-wired. */
 
92
 
 
93
    /* Select first 32k ROM page. */
 
94
 
 
95
    cpu_set_read_address_32k_rom_block (0x8000, MMC_FIRST_ROM_BLOCK);
 
96
 
 
97
 
 
98
    /* Select first 8k CHR-ROM page. */
 
99
 
 
100
    for (index = 0; index < 8; index ++)
 
101
    {
 
102
        ppu_set_ram_1k_pattern_vrom_block ((index << 10), index);
 
103
    }
 
104
}
 
105
 
 
106
 
 
107
static int ffe_f3_init (void)
 
108
{
 
109
    /* Mapper requires some CHR ROM */
 
110
    if (mmc_pattern_vram_in_use)
 
111
    {
 
112
        return -1;
 
113
    }
 
114
 
 
115
 
 
116
    /* Install write handler. */
 
117
 
 
118
    cpu_set_write_handler_32k (0x8000, ffe_f3_write);
 
119
 
 
120
 
 
121
    /* Set initial mappings. */
 
122
 
 
123
    ffe_f3_reset ();
 
124
 
 
125
 
 
126
    return (0);
 
127
}
 
128
 
 
129
 
 
130
static void ffe_f3_save_state (PACKFILE * file, int version)
 
131
{
 
132
    pack_putc (ffe_f3_last_write, file);
 
133
}
 
134
 
 
135
 
 
136
static void ffe_f3_load_state (PACKFILE * file, int version)
 
137
{
 
138
    ffe_f3_write (0x8000, pack_getc (file));
 
139
}