2 TOSHIBA PASOPIA Emulator 'EmuPIA'
3 TOSHIBA PASOPIA 7 Emulator 'EmuPIA7'
5 Author : Takeda.Toshiya
8 [ ram pac 2 (32kbytes) ]
15 static const uint8_t header[16] = {
16 0xaa, 0x1f, 0x04, 0x00, 0x04, 0x80, 0x00, 0x01, 0x04, 0x04, 0x01, 0x03, 0x08, 0x00, 0x00, 0x00
19 void RAMPAC2::initialize(int id)
21 opened = modified = false;
23 // note: rampac2 id must be 1 or 2 !!!
24 if(_tcscmp(config.recent_binary_path[id - 1][0], _T("")) != 0) {
26 open_file(config.recent_binary_path[id - 1][0]);
28 // open default rampac2 file
29 open_file(create_local_path(_T("RAMPAC%d.BIN"), id));
33 void RAMPAC2::release()
36 if(opened && modified) {
37 FILEIO* fio = new FILEIO();
38 if(fio->Fopen(path, FILEIO_WRITE_BINARY)) {
39 fio->Fwrite(ram, sizeof(ram), 1);
51 void RAMPAC2::write_io8(uint32_t addr, uint32_t data)
55 ptr = (ptr & 0x7f00) | data;
58 ptr = (ptr & 0x00ff) | ((data & 0x7f) << 8);
61 if(ram[ptr & 0x7fff] != data) {
64 ram[ptr & 0x7fff] = data;
69 uint32_t RAMPAC2::read_io8(uint32_t addr)
71 return ram[ptr & 0x7fff];
74 void RAMPAC2::open_file(const _TCHAR* file_path)
79 // load specified file
80 FILEIO* fio = new FILEIO();
81 if(fio->Fopen(file_path, FILEIO_READ_BINARY)) {
82 fio->Fread(ram, sizeof(ram), 1);
85 // initialize formatted image
86 memset(ram, 0, sizeof(ram));
87 memcpy(ram, header, sizeof(header));
88 memset(ram + 0x20, 0xff, 0x200);
89 memset(ram + 0x300, 0xfe, 0x004);
90 memset(ram + 0x304, 0xff, 0x0fc);
94 my_tcscpy_s(path, _MAX_PATH, file_path);
99 #define STATE_VERSION 1
101 bool RAMPAC2::process_state(FILEIO* state_fio, bool loading)
103 if(!state_fio->StateCheckUint32(STATE_VERSION)) {
106 state_fio->StateBuffer(ram, sizeof(ram), 1);
107 state_fio->StateUint32(ptr);
108 state_fio->StateBool(opened);
109 state_fio->StateBool(modified);