mirror of
https://github.com/Dillonb/n64.git
synced 2024-05-17 03:20:34 -04:00
fix: pack
-> pak
This commit is contained in:
parent
6f651209d4
commit
4ed6ae72d2
|
@ -103,7 +103,7 @@
|
|||
"publisher": "Ubisoft",
|
||||
"genre": "Racing",
|
||||
"compatibility": "MINOR_ISSUES",
|
||||
"notes": "Does not detect controller pack",
|
||||
"notes": "Does not detect controller pak",
|
||||
"path": "f1_pole_position.z64",
|
||||
"date_tested": "2021-05-22"
|
||||
},
|
||||
|
@ -211,7 +211,7 @@
|
|||
"publisher": "Titus",
|
||||
"genre": "Racing",
|
||||
"compatibility": "MINOR_ISSUES",
|
||||
"notes": "Can't repair controller pack, works when I copy one repaired by another game.",
|
||||
"notes": "Can't repair controller pak, works when I copy one repaired by another game.",
|
||||
"path": "automobili_lamborghini.z64",
|
||||
"date_tested": "2021-05-22"
|
||||
},
|
||||
|
@ -1411,7 +1411,7 @@
|
|||
"publisher": "Iguana",
|
||||
"genre": "FPS",
|
||||
"compatibility": "BROKEN",
|
||||
"notes": "hang when repairing controller pack, hang when going ingame",
|
||||
"notes": "hang when repairing controller pak, hang when going ingame",
|
||||
"path": "forsaken_64.z64",
|
||||
"date_tested": "2021-05-30"
|
||||
},
|
||||
|
@ -1507,7 +1507,7 @@
|
|||
"publisher": "Titus",
|
||||
"genre": "Adventure",
|
||||
"compatibility": "MINOR_ISSUES",
|
||||
"notes": "Unable to repair controller pack, crackly audio",
|
||||
"notes": "Unable to repair controller pak, crackly audio",
|
||||
"path": "hercules.z64",
|
||||
"date_tested": ""
|
||||
},
|
||||
|
|
|
@ -170,7 +170,7 @@ void devices_init(n64_save_type_t save_type) {
|
|||
joybus_devices[i].type = n64_settings.controller_port[i];
|
||||
if (joybus_devices[i].type) {
|
||||
// TODO: make this configurable
|
||||
joybus_devices[i].controller.accessory_type = CONTROLLER_ACCESSORY_MEMPACK;
|
||||
joybus_devices[i].controller.accessory_type = CONTROLLER_ACCESSORY_MEMPAK;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -37,8 +37,8 @@ typedef enum n64_button {
|
|||
|
||||
typedef enum n64_controller_accessory_type {
|
||||
CONTROLLER_ACCESSORY_NONE,
|
||||
CONTROLLER_ACCESSORY_MEMPACK,
|
||||
CONTROLLER_ACCESSORY_RUMBLE_PACK
|
||||
CONTROLLER_ACCESSORY_MEMPAK,
|
||||
CONTROLLER_ACCESSORY_RUMBLE_PAK
|
||||
} n64_controller_accessory_type_t;
|
||||
|
||||
#define JOYAXIS_MIN INT16_MIN
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#include <limits.h>
|
||||
|
||||
#define SAVE_DATA_DEBOUNCE_FRAMES 60
|
||||
#define MEMPACK_SIZE 32768
|
||||
#define MEMPAK_SIZE 32768
|
||||
|
||||
u32 sram_read_word() {
|
||||
return 0xFFFFFFFF;
|
||||
|
@ -322,9 +322,9 @@ void init_savedata(n64_mem_t* mem, const char* rom_path) {
|
|||
}
|
||||
|
||||
|
||||
void init_mempack(n64_mem_t* mem, const char* rom_path) {
|
||||
if (mem->mempack_data == NULL) {
|
||||
mem->mempack_data = load_backup_file(rom_path, ".mempak", MEMPACK_SIZE, mem->mempack_file_path, 0x00);
|
||||
void init_mempak(n64_mem_t* mem, const char* rom_path) {
|
||||
if (mem->mempak_data == NULL) {
|
||||
mem->mempak_data = load_backup_file(rom_path, ".mempak", MEMPAK_SIZE, mem->mempak_file_path, 0x00);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -350,12 +350,12 @@ void persist_backup() {
|
|||
n64sys.mem.save_data,
|
||||
"save");
|
||||
|
||||
persist(&n64sys.mem.mempack_data_dirty,
|
||||
&n64sys.mem.mempack_data_debounce_counter,
|
||||
MEMPACK_SIZE,
|
||||
n64sys.mem.mempack_file_path,
|
||||
n64sys.mem.mempack_data,
|
||||
"mempack");
|
||||
persist(&n64sys.mem.mempak_data_dirty,
|
||||
&n64sys.mem.mempak_data_debounce_counter,
|
||||
MEMPAK_SIZE,
|
||||
n64sys.mem.mempak_file_path,
|
||||
n64sys.mem.mempak_data,
|
||||
"mempak");
|
||||
}
|
||||
|
||||
void force_persist_backup() {
|
||||
|
@ -365,8 +365,8 @@ void force_persist_backup() {
|
|||
should_persist = true;
|
||||
}
|
||||
|
||||
if (n64sys.mem.mempack_data_dirty || n64sys.mem.mempack_data_debounce_counter > 0) {
|
||||
n64sys.mem.mempack_data_debounce_counter = 0;
|
||||
if (n64sys.mem.mempak_data_dirty || n64sys.mem.mempak_data_debounce_counter > 0) {
|
||||
n64sys.mem.mempak_data_debounce_counter = 0;
|
||||
should_persist = true;
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ u8 backup_read_byte(u32 index);
|
|||
|
||||
size_t get_save_size(n64_save_type_t save_type);
|
||||
void init_savedata(n64_mem_t* mem, const char* rom_path);
|
||||
void init_mempack(n64_mem_t* mem, const char* rom_path);
|
||||
void init_mempak(n64_mem_t* mem, const char* rom_path);
|
||||
|
||||
void persist_backup();
|
||||
void force_persist_backup();
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
void init_mem(n64_mem_t* mem) {
|
||||
mem->save_data_dirty = false;
|
||||
mem->save_data_debounce_counter = -1;
|
||||
mem->mempack_data_debounce_counter = -1;
|
||||
mem->mempak_data_debounce_counter = -1;
|
||||
|
||||
mem->ri_reg[RI_MODE_REG] = 0xE;
|
||||
mem->ri_reg[RI_CONFIG_REG] = 0x40;
|
||||
|
|
|
@ -96,7 +96,7 @@ typedef struct n64_mem {
|
|||
si_reg_t si_reg;
|
||||
u8 pif_ram[PIF_RAM_SIZE];
|
||||
char save_file_path[PATH_MAX];
|
||||
char mempack_file_path[PATH_MAX];
|
||||
char mempak_file_path[PATH_MAX];
|
||||
n64_save_type_t save_type;
|
||||
u8 isviewer_buffer[CART_ISVIEWER_SIZE];
|
||||
|
||||
|
@ -116,9 +116,9 @@ typedef struct n64_mem {
|
|||
u8 write_buffer[128];
|
||||
} flash;
|
||||
|
||||
u8* mempack_data;
|
||||
bool mempack_data_dirty;
|
||||
int mempack_data_debounce_counter;
|
||||
u8* mempak_data;
|
||||
bool mempak_data_dirty;
|
||||
int mempak_data_debounce_counter;
|
||||
|
||||
} n64_mem_t;
|
||||
|
||||
|
|
|
@ -9,13 +9,13 @@
|
|||
|
||||
#define PIF_COMMAND_CONTROLLER_ID 0x00
|
||||
#define PIF_COMMAND_READ_BUTTONS 0x01
|
||||
#define PIF_COMMAND_MEMPACK_READ 0x02
|
||||
#define PIF_COMMAND_MEMPACK_WRITE 0x03
|
||||
#define PIF_COMMAND_MEMPAK_READ 0x02
|
||||
#define PIF_COMMAND_MEMPAK_WRITE 0x03
|
||||
#define PIF_COMMAND_EEPROM_READ 0x04
|
||||
#define PIF_COMMAND_EEPROM_WRITE 0x05
|
||||
#define PIF_COMMAND_RESET 0xFF
|
||||
|
||||
#define MEMPACK_SIZE 0x8000
|
||||
#define MEMPAK_SIZE 0x8000
|
||||
|
||||
#define CMD_CMDLEN_INDEX 0
|
||||
#define CMD_RESLEN_INDEX 1
|
||||
|
@ -449,8 +449,8 @@ u8 data_crc(const u8* data) {
|
|||
}
|
||||
|
||||
|
||||
INLINE void pif_mempack_read(u8* cmd, u8* res) {
|
||||
init_mempack(&n64sys.mem, n64sys.rom_path);
|
||||
INLINE void pif_mempak_read(u8* cmd, u8* res) {
|
||||
init_mempak(&n64sys.mem, n64sys.rom_path);
|
||||
// First two bytes in the command are the offset
|
||||
u16 offset = CMD_DATA[0] << 8;
|
||||
offset |= CMD_DATA[1];
|
||||
|
@ -463,14 +463,14 @@ INLINE void pif_mempack_read(u8* cmd, u8* res) {
|
|||
switch (get_controller_accessory_type(pif_channel)) {
|
||||
case CONTROLLER_ACCESSORY_NONE:
|
||||
break;
|
||||
case CONTROLLER_ACCESSORY_MEMPACK:
|
||||
if (offset <= MEMPACK_SIZE - 0x20) {
|
||||
case CONTROLLER_ACCESSORY_MEMPAK:
|
||||
if (offset <= MEMPAK_SIZE - 0x20) {
|
||||
for (int i = 0; i < 32; i++) {
|
||||
res[i] = n64sys.mem.mempack_data[offset + i];
|
||||
res[i] = n64sys.mem.mempak_data[offset + i];
|
||||
}
|
||||
}
|
||||
break;
|
||||
case CONTROLLER_ACCESSORY_RUMBLE_PACK:
|
||||
case CONTROLLER_ACCESSORY_RUMBLE_PAK:
|
||||
for (int i = 0; i < 32; i++) {
|
||||
res[i] = 0x80;
|
||||
}
|
||||
|
@ -481,7 +481,7 @@ INLINE void pif_mempack_read(u8* cmd, u8* res) {
|
|||
res[32] = data_crc(&res[0]);
|
||||
}
|
||||
|
||||
INLINE void pif_mempack_write(u8* cmd, u8* res) {
|
||||
INLINE void pif_mempak_write(u8* cmd, u8* res) {
|
||||
// First two bytes in the command are the offset
|
||||
u16 offset = CMD_DATA[0] << 8;
|
||||
offset |= CMD_DATA[1];
|
||||
|
@ -494,18 +494,18 @@ INLINE void pif_mempack_write(u8* cmd, u8* res) {
|
|||
switch (get_controller_accessory_type(pif_channel)) {
|
||||
case CONTROLLER_ACCESSORY_NONE:
|
||||
break;
|
||||
case CONTROLLER_ACCESSORY_MEMPACK:
|
||||
if (offset <= MEMPACK_SIZE - 0x20) {
|
||||
init_mempack(&n64sys.mem, n64sys.rom_path);
|
||||
case CONTROLLER_ACCESSORY_MEMPAK:
|
||||
if (offset <= MEMPAK_SIZE - 0x20) {
|
||||
init_mempak(&n64sys.mem, n64sys.rom_path);
|
||||
bool data_changed = false;
|
||||
for (int i = 0; i < 32; i++) {
|
||||
data_changed |= (n64sys.mem.mempack_data[offset + i] != CMD_DATA[i + 2]);
|
||||
n64sys.mem.mempack_data[offset + i] = CMD_DATA[i + 2];
|
||||
data_changed |= (n64sys.mem.mempak_data[offset + i] != CMD_DATA[i + 2]);
|
||||
n64sys.mem.mempak_data[offset + i] = CMD_DATA[i + 2];
|
||||
}
|
||||
n64sys.mem.mempack_data_dirty |= data_changed;
|
||||
n64sys.mem.mempak_data_dirty |= data_changed;
|
||||
}
|
||||
break;
|
||||
case CONTROLLER_ACCESSORY_RUMBLE_PACK: {
|
||||
case CONTROLLER_ACCESSORY_RUMBLE_PAK: {
|
||||
bool all_zeroes = true;
|
||||
bool all_ones = true;
|
||||
for (int i = 0; i < 32; i++) {
|
||||
|
@ -636,15 +636,15 @@ void process_pif_command() {
|
|||
unimplemented(reslen != 4, "Read buttons with reslen != 4");
|
||||
pif_read_buttons(cmd, res);
|
||||
break;
|
||||
case PIF_COMMAND_MEMPACK_READ:
|
||||
unimplemented(cmdlen != 3, "Mempack read with cmdlen != 3");
|
||||
unimplemented(reslen != 33, "Mempack read with reslen != 33");
|
||||
pif_mempack_read(cmd, res);
|
||||
case PIF_COMMAND_MEMPAK_READ:
|
||||
unimplemented(cmdlen != 3, "Mempak read with cmdlen != 3");
|
||||
unimplemented(reslen != 33, "Mempak read with reslen != 33");
|
||||
pif_mempak_read(cmd, res);
|
||||
break;
|
||||
case PIF_COMMAND_MEMPACK_WRITE:
|
||||
unimplemented(cmdlen != 35, "Mempack write with cmdlen != 35");
|
||||
unimplemented(reslen != 1, "Mempack write with reslen != 1");
|
||||
pif_mempack_write(cmd, res);
|
||||
case PIF_COMMAND_MEMPAK_WRITE:
|
||||
unimplemented(cmdlen != 35, "Mempak write with cmdlen != 35");
|
||||
unimplemented(reslen != 1, "Mempak write with reslen != 1");
|
||||
pif_mempak_write(cmd, res);
|
||||
break;
|
||||
case PIF_COMMAND_EEPROM_READ:
|
||||
unimplemented(cmdlen != 2, "EEPROM read with cmdlen != 2");
|
||||
|
|
|
@ -116,9 +116,9 @@ void reset_n64system() {
|
|||
free(n64sys.mem.save_data);
|
||||
n64sys.mem.save_data = NULL;
|
||||
}
|
||||
if (n64sys.mem.mempack_data != NULL) {
|
||||
free(n64sys.mem.mempack_data);
|
||||
n64sys.mem.mempack_data = NULL;
|
||||
if (n64sys.mem.mempak_data != NULL) {
|
||||
free(n64sys.mem.mempak_data);
|
||||
n64sys.mem.mempak_data = NULL;
|
||||
}
|
||||
N64CPU.branch = false;
|
||||
N64CPU.prev_branch = false;
|
||||
|
|
Loading…
Reference in a new issue