libsidplayfp 2.15.0
SystemRAMBank.h
1/*
2 * This file is part of libsidplayfp, a SID player engine.
3 *
4 * Copyright 2012-2021 Leandro Nini <drfiemost@users.sourceforge.net>
5 * Copyright 2010 Antti Lankila
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 */
21
22#ifndef SYSTEMRAMBANK_H
23#define SYSTEMRAMBANK_H
24
25#include <stdint.h>
26#include <cstring>
27
28#include "Bank.h"
29
30#include "sidcxx11.h"
31
32namespace libsidplayfp
33{
34
38class SystemRAMBank final : public Bank
39{
40 friend class MMU;
41
42private:
44 uint8_t ram[0x10000];
45
46public:
58 void reset()
59 {
60 uint8_t byte = 0x00;
61 for (int j=0x0000; j<0x10000; j+=0x4000)
62 {
63 std::memset(ram+j, byte, 0x4000);
64 byte = ~byte;
65 for (int i = 0x02; i < 0x4000; i += 0x08)
66 {
67 std::memset(ram+j+i, byte, 0x04);
68 }
69 }
70 }
71
72 uint8_t peek(uint_least16_t address) override
73 {
74 return ram[address];
75 }
76
77 void poke(uint_least16_t address, uint8_t value) override
78 {
79 ram[address] = value;
80 }
81};
82
83}
84
85#endif
Definition Bank.h:36
Definition mmu.h:51
Definition SystemRAMBank.h:39
void reset()
Definition SystemRAMBank.h:58
uint8_t peek(uint_least16_t address) override
Definition SystemRAMBank.h:72
void poke(uint_least16_t address, uint8_t value) override
Definition SystemRAMBank.h:77