2020-05-05 12:15:53 +00:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <ultra64.h>
|
2020-05-08 03:30:08 +00:00
|
|
|
#include <assert.h>
|
|
|
|
#include <fcntl.h>
|
2020-05-05 12:15:53 +00:00
|
|
|
|
|
|
|
#include "controller_api.h"
|
|
|
|
|
2020-05-08 12:47:25 +00:00
|
|
|
static FILE *fin;
|
2020-05-08 03:30:08 +00:00
|
|
|
static int counter;
|
|
|
|
|
|
|
|
#define OFFSET 0x400
|
2020-05-08 12:47:25 +00:00
|
|
|
#define fname "cont.m64"
|
2020-05-05 12:15:53 +00:00
|
|
|
|
|
|
|
static void tas_init(void) {
|
2020-05-08 12:47:25 +00:00
|
|
|
fin = fopen(fname, "rb");
|
|
|
|
if (fin == NULL) {
|
|
|
|
return;
|
2020-05-05 12:15:53 +00:00
|
|
|
}
|
2020-05-08 12:47:25 +00:00
|
|
|
|
|
|
|
printf("[tas_playback] loading %s\n", fname);
|
|
|
|
uint8_t buf[OFFSET];
|
|
|
|
fread(buf, 1, sizeof(buf), fin);
|
|
|
|
counter = 0;
|
2020-05-05 12:15:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void tas_read(OSContPad *pad) {
|
2020-05-08 12:47:25 +00:00
|
|
|
if (fin == NULL) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t bytes[4] = {0};
|
|
|
|
int result = fread(bytes, 1, 4, fin);
|
|
|
|
if (feof(fin)) {
|
|
|
|
printf("[tas_playback] end of tas input\n");
|
|
|
|
fclose(fin);
|
|
|
|
fin = NULL;
|
|
|
|
return;
|
2020-05-05 12:15:53 +00:00
|
|
|
}
|
2020-05-08 12:47:25 +00:00
|
|
|
|
|
|
|
pad->button = (bytes[0] << 8) | bytes[1];
|
|
|
|
pad->stick_x = bytes[2];
|
|
|
|
pad->stick_y = bytes[3];
|
|
|
|
counter+=4;
|
|
|
|
printf("[tas_playback] %08x called %04x %02x%02x\n", (counter + OFFSET), pad->button, bytes[2], bytes[3]);
|
|
|
|
fflush(stdout);
|
2020-05-05 12:15:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
struct ControllerAPI controller_recorded_tas = {
|
|
|
|
tas_init,
|
|
|
|
tas_read
|
|
|
|
};
|