2020-09-13 21:32:55 -04:00
|
|
|
#pragma once
|
|
|
|
|
2020-08-22 22:30:12 -04:00
|
|
|
#ifndef JAK1_IOP_THREAD_H
|
|
|
|
#define JAK1_IOP_THREAD_H
|
|
|
|
|
|
|
|
#include "IOP_Kernel.h"
|
|
|
|
|
2022-06-22 23:37:46 -04:00
|
|
|
#include "common/common_types.h"
|
|
|
|
|
2020-08-26 01:21:33 -04:00
|
|
|
enum IOP_Status { IOP_WAIT_FOR_LOAD, IOP_OVERLORD_INIT, IOP_OVERLORD_RUN, IOP_OVERLORD_STOP };
|
2020-08-22 22:30:12 -04:00
|
|
|
|
|
|
|
class IOP {
|
|
|
|
public:
|
|
|
|
IOP();
|
|
|
|
~IOP();
|
|
|
|
void* iop_alloc(int size);
|
|
|
|
void reset_allocator();
|
|
|
|
void send_status(IOP_Status new_status);
|
|
|
|
void wait_for_overlord_start_cmd();
|
|
|
|
void wait_for_overlord_init_finish();
|
|
|
|
void signal_overlord_init_finish();
|
2022-05-28 20:12:33 -04:00
|
|
|
void signal_run_iop(bool force);
|
2020-08-22 22:30:12 -04:00
|
|
|
void wait_run_iop();
|
|
|
|
void kill_from_ee();
|
|
|
|
|
2020-08-26 01:21:33 -04:00
|
|
|
void set_ee_main_mem(u8* mem) { ee_main_mem = mem; }
|
2020-08-22 22:30:12 -04:00
|
|
|
|
|
|
|
IOP_Status status = IOP_WAIT_FOR_LOAD;
|
|
|
|
|
|
|
|
char overlord_arg_data[512];
|
|
|
|
char* overlord_argv[8];
|
|
|
|
s32 overlord_argc;
|
|
|
|
|
|
|
|
IOP_Kernel kernel;
|
|
|
|
u8* ee_main_mem = nullptr;
|
|
|
|
u64 iop_iters_des = 0;
|
|
|
|
u64 iop_iters_act = 0;
|
|
|
|
bool want_exit = false;
|
2020-08-26 01:21:33 -04:00
|
|
|
|
2020-08-22 22:30:12 -04:00
|
|
|
private:
|
|
|
|
std::vector<void*> allocations;
|
|
|
|
std::condition_variable cv;
|
|
|
|
std::mutex iop_mutex, iters_mutex;
|
|
|
|
bool overlord_init_done = false;
|
|
|
|
std::condition_variable iop_run_cv;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif // JAK1_IOP_THREAD_H
|