2014-12-29 21:05:35 +00:00
|
|
|
#pragma once
|
2021-11-13 14:56:42 +00:00
|
|
|
#include "serialize.h"
|
2014-12-29 21:05:35 +00:00
|
|
|
|
2019-07-30 17:04:51 +00:00
|
|
|
#define SYSCALL_GDROM 0x00
|
2014-12-29 21:05:35 +00:00
|
|
|
|
2019-07-30 17:04:51 +00:00
|
|
|
#define GDROM_SEND_COMMAND 0x00
|
|
|
|
#define GDROM_CHECK_COMMAND 0x01
|
|
|
|
#define GDROM_MAIN 0x02
|
|
|
|
#define GDROM_INIT 0x03
|
|
|
|
#define GDROM_CHECK_DRIVE 0x04
|
2019-08-03 17:20:30 +00:00
|
|
|
#define GDROM_G1_DMA_END 0x05 // r4: callback, r5: callback arg
|
|
|
|
#define GDROM_REQ_DMA_TRANS 0x06 // r4: request id
|
|
|
|
#define GDROM_CHECK_DMA_TRANS 0x07 // r4: request id, r5: u32 *size
|
2019-07-30 17:04:51 +00:00
|
|
|
#define GDROM_ABORT_COMMAND 0x08
|
|
|
|
#define GDROM_RESET 0x09
|
|
|
|
#define GDROM_SECTOR_MODE 0x0A
|
2019-08-03 17:20:30 +00:00
|
|
|
#define GDROM_SET_PIO_CALLBACK 0x0B // r4: callback, r5: callback arg
|
|
|
|
#define GDROM_REQ_PIO_TRANS 0x0C // r4: request id
|
|
|
|
#define GDROM_CHECK_PIO_TRANS 0x0D // r4: request id, r5: u32 *size
|
2014-12-29 21:05:35 +00:00
|
|
|
|
2019-07-30 17:04:51 +00:00
|
|
|
#define GDCC_PIOREAD 0x10
|
|
|
|
#define GDCC_DMAREAD 0x11
|
|
|
|
#define GDCC_GETTOC 0x12
|
|
|
|
#define GDCC_GETTOC2 0x13
|
|
|
|
#define GDCC_PLAY 0x14
|
|
|
|
#define GDCC_PLAY_SECTOR 0x15
|
|
|
|
#define GDCC_PAUSE 0x16
|
|
|
|
#define GDCC_RELEASE 0x17
|
|
|
|
#define GDCC_INIT 0x18
|
|
|
|
#define GDCC_SEEK 0x1b
|
|
|
|
#define GDCC_READ 0x1c
|
|
|
|
#define GDCC_REQ_MODE 0x1e
|
|
|
|
#define GDCC_SET_MODE 0x1f
|
|
|
|
#define GDCC_STOP 0x21
|
|
|
|
#define GDCC_GETSCD 0x22
|
|
|
|
#define GDCC_GETSES 0x23
|
|
|
|
#define GDCC_REQ_STAT 0x24
|
2019-08-03 17:20:30 +00:00
|
|
|
#define GDCC_MULTI_DMAREAD 0x26
|
|
|
|
#define GDCC_MULTI_PIOREAD 0x27
|
2019-07-30 17:04:51 +00:00
|
|
|
#define GDCC_GET_VER 0x28
|
2019-08-03 17:20:30 +00:00
|
|
|
// pseudo-commands for multi dma/pio xfers
|
|
|
|
#define GDCC_REQ_DMA_TRANS 0x106
|
|
|
|
#define GDCC_REQ_PIO_TRANS 0x10C
|
2014-12-29 21:05:35 +00:00
|
|
|
|
2019-07-30 17:04:51 +00:00
|
|
|
#define MISC_INIT 0x00
|
|
|
|
#define MISC_SETVECTOR 0x01
|
2014-12-29 21:05:35 +00:00
|
|
|
|
2021-11-13 14:56:42 +00:00
|
|
|
void gdrom_hle_init();
|
|
|
|
void gdrom_hle_term();
|
2014-12-30 00:57:13 +00:00
|
|
|
void gdrom_hle_op();
|
2019-08-19 15:19:27 +00:00
|
|
|
|
|
|
|
typedef enum { BIOS_ERROR = -1, BIOS_INACTIVE, BIOS_ACTIVE, BIOS_COMPLETED, BIOS_DATA_AVAIL } gd_bios_status;
|
|
|
|
struct gdrom_hle_state_t
|
|
|
|
{
|
2021-09-11 09:22:58 +00:00
|
|
|
gdrom_hle_state_t() : params{}, result{} {}
|
|
|
|
|
|
|
|
u32 last_request_id = 0xFFFFFFFF;
|
|
|
|
u32 next_request_id = 2;
|
|
|
|
gd_bios_status status = BIOS_INACTIVE;
|
|
|
|
u32 command = 0;
|
2019-08-19 15:19:27 +00:00
|
|
|
u32 params[4];
|
|
|
|
u32 result[4];
|
2021-09-11 09:22:58 +00:00
|
|
|
u32 cur_sector = 0;
|
|
|
|
u32 multi_read_sector = 0;
|
|
|
|
u32 multi_read_offset = 0;
|
|
|
|
u32 multi_read_count = 0;
|
|
|
|
u32 multi_read_total = 0;
|
|
|
|
u32 multi_callback = 0;
|
|
|
|
u32 multi_callback_arg = 0;
|
|
|
|
bool dma_trans_ended = false;
|
|
|
|
u64 xfer_end_time = 0;
|
2019-08-19 15:19:27 +00:00
|
|
|
|
2021-11-13 14:56:42 +00:00
|
|
|
void Serialize(Serializer& ser)
|
2019-08-19 15:19:27 +00:00
|
|
|
{
|
2021-11-13 14:56:42 +00:00
|
|
|
ser << last_request_id;
|
|
|
|
ser << next_request_id;
|
|
|
|
ser << status;
|
|
|
|
ser << command;
|
|
|
|
ser << params;
|
|
|
|
ser << result;
|
|
|
|
ser << cur_sector;
|
|
|
|
ser << multi_read_sector;
|
|
|
|
ser << multi_read_offset;
|
|
|
|
ser << multi_read_count;
|
|
|
|
ser << multi_read_total;
|
|
|
|
ser << multi_callback;
|
|
|
|
ser << multi_callback_arg;
|
|
|
|
ser << dma_trans_ended;
|
|
|
|
ser << xfer_end_time;
|
|
|
|
|
2019-08-19 15:19:27 +00:00
|
|
|
}
|
2021-11-13 14:56:42 +00:00
|
|
|
void Deserialize(Deserializer& deser)
|
2019-08-19 15:19:27 +00:00
|
|
|
{
|
2021-11-13 14:56:42 +00:00
|
|
|
deser >> last_request_id;
|
|
|
|
deser >> next_request_id;
|
|
|
|
deser >> status;
|
|
|
|
deser >> command;
|
|
|
|
deser >> params;
|
|
|
|
deser >> result;
|
|
|
|
deser >> cur_sector;
|
|
|
|
deser >> multi_read_sector;
|
|
|
|
deser >> multi_read_offset;
|
|
|
|
deser >> multi_read_count;
|
|
|
|
deser >> multi_read_total;
|
|
|
|
deser >> multi_callback;
|
|
|
|
deser >> multi_callback_arg;
|
|
|
|
deser >> dma_trans_ended;
|
|
|
|
deser >> xfer_end_time;
|
2019-08-19 15:19:27 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
extern gdrom_hle_state_t gd_hle_state;
|
|
|
|
|