File: mega-cd-32x.cpp

package info (click to toggle)
ares 126-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 32,600 kB
  • sloc: cpp: 356,508; ansic: 20,394; makefile: 16; sh: 2
file content (42 lines) | stat: -rw-r--r-- 1,384 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
struct MegaCD32X : System {
  auto name() -> string override { return "Mega CD 32X"; }
  auto load(string location) -> bool override;
  auto save(string location) -> bool override;

  static constexpr u8 bram[64] = {
    0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x00,0x00,0x00,0x00,0x40,
    0x00,0x7d,0x00,0x7d,0x00,0x7d,0x00,0x7d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x53,0x45,0x47,0x41,0x5f,0x43,0x44,0x5f,0x52,0x4f,0x4d,0x00,0x01,0x00,0x00,0x00,
    0x52,0x41,0x4d,0x5f,0x43,0x41,0x52,0x54,0x52,0x49,0x44,0x47,0x45,0x5f,0x5f,0x5f,
  };
};

auto MegaCD32X::load(string location) -> bool {
  auto bios = Pak::read(location);
  if(!bios) return false;

  this->location = locate();
  pak = new vfs::directory;
  pak->append("tmss.rom", Resource::MegaDrive::TMSS);
  pak->append("bios.rom", bios);
  pak->append("vector.rom", Resource::Mega32X::Vector);
  pak->append("sh2.boot.mrom", Resource::Mega32X::SH2BootM);
  pak->append("sh2.boot.srom", Resource::Mega32X::SH2BootS);
  pak->append("backup.ram", 8_KiB);

  if(auto fp = pak->write("backup.ram")) {
    for(auto address : range(fp->size())) fp->write(0xff);
    fp->seek(fp->size() - sizeof(bram));
    for(auto& byte : bram) fp->write(byte);
  }

  Pak::load("backup.ram", ".bram");

  return true;
}

auto MegaCD32X::save(string location) -> bool {
  Pak::save("backup.ram", ".bram");

  return true;
}