flycast/core/reios/gdrom_hle.h

116 lines
3.0 KiB
C
Raw Normal View History

#pragma once
2019-07-30 17:04:51 +00:00
#define SYSCALL_GDROM 0x00
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
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
2019-07-30 17:04:51 +00:00
#define MISC_INIT 0x00
#define MISC_SETVECTOR 0x01
#define CTOC_LBA(n) (n)
2019-09-07 12:37:39 +00:00
#define CTOC_ADR(n) ((n)<<24)
#define CTOC_CTRL(n) ((n)<<28)
#define CTOC_TRACK(n) ((n)<<16)
2014-12-30 00:57:13 +00:00
void gdrom_hle_op();
typedef enum { BIOS_ERROR = -1, BIOS_INACTIVE, BIOS_ACTIVE, BIOS_COMPLETED, BIOS_DATA_AVAIL } gd_bios_status;
struct gdrom_hle_state_t
{
u32 last_request_id;
u32 next_request_id;
gd_bios_status status;
u32 command;
u32 params[4];
u32 result[4];
u32 cur_sector;
u32 multi_read_sector;
u32 multi_read_offset;
u32 multi_read_count;
u32 multi_read_total;
u32 multi_callback;
u32 multi_callback_arg;
bool dma_trans_ended;
u64 xfer_end_time;
bool Serialize(void **data, unsigned int *total_size)
{
REICAST_S(last_request_id);
REICAST_S(next_request_id);
REICAST_S(status);
REICAST_S(command);
REICAST_S(params);
REICAST_S(result);
REICAST_S(cur_sector);
REICAST_S(multi_read_sector);
REICAST_S(multi_read_offset);
REICAST_S(multi_read_count);
REICAST_S(multi_read_total);
REICAST_S(multi_callback);
REICAST_S(multi_callback_arg);
REICAST_S(dma_trans_ended);
REICAST_S(xfer_end_time);
return true;
}
bool Unserialize(void **data, unsigned int *total_size)
{
REICAST_US(last_request_id);
REICAST_US(next_request_id);
REICAST_US(status);
REICAST_US(command);
REICAST_US(params);
REICAST_US(result);
REICAST_US(cur_sector);
REICAST_US(multi_read_sector);
REICAST_US(multi_read_offset);
REICAST_US(multi_read_count);
REICAST_US(multi_read_total);
REICAST_US(multi_callback);
REICAST_US(multi_callback_arg);
REICAST_US(dma_trans_ended);
REICAST_US(xfer_end_time);
return true;
}
};
extern gdrom_hle_state_t gd_hle_state;