#include "video/poly.h"
typedef float MATRIX[4][4];
typedef float VECTOR[4];
typedef float VECTOR3[3];
typedef struct {
float x,y,z,d;
} PLANE;
typedef struct _cached_texture cached_texture;
class model3_state : public driver_device
{
public:
model3_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag) { }
int m_sound_irq_enable;
emu_timer *m_sound_timer;
UINT8 m_irq_enable;
UINT8 m_irq_state;
UINT8 m_scsi_irq_state;
UINT64 *m_work_ram;
int m_crom_bank;
int m_controls_bank;
UINT32 m_real3d_device_id;
UINT16 *m_soundram;
UINT32 m_mpc105_regs[0x40];
UINT32 m_mpc105_addr;
int m_pci_bus;
int m_pci_device;
int m_pci_function;
int m_pci_reg;
UINT32 m_mpc106_regs[0x40];
UINT32 m_mpc106_addr;
UINT32 m_dma_data;
UINT32 m_dma_status;
UINT32 m_dma_source;
UINT32 m_dma_dest;
UINT32 m_dma_endian;
UINT32 m_dma_irq;
UINT64 m_controls_2;
UINT64 m_controls_3;
UINT8 m_serial_fifo1;
UINT8 m_serial_fifo2;
int m_lightgun_reg_sel;
int m_adc_channel;
UINT64 m_real3d_status;
UINT64 *m_network_ram;
int m_prot_data_ptr;
int m_scsp_last_line;
int m_vblank;
UINT32 *m_vrom;
int m_step;
UINT64 *m_paletteram64;
int m_m3_step;
INT32 m_tap_state;
UINT64 m_ir;
UINT8 m_id_data[32];
INT32 m_id_size;
int m_tdo;
UINT8 m_layer_enable;
UINT32 m_layer_modulate_r;
UINT32 m_layer_modulate_g;
UINT32 m_layer_modulate_b;
UINT32 m_layer_modulate1;
UINT32 m_layer_modulate2;
UINT64 m_layer_scroll[2];
UINT64 *m_m3_char_ram;
UINT64 *m_m3_tile_ram;
UINT32 *m_texture_fifo;
int m_texture_fifo_pos;
UINT16 *m_texture_ram[2];
UINT32 *m_display_list_ram;
UINT32 *m_culling_ram;
UINT32 *m_polygon_ram;
UINT16 *m_pal_lookup;
int m_real3d_display_list;
bitmap_t *m_bitmap3d;
bitmap_t *m_zbuffer;
rectangle m_clip3d;
rectangle *m_screen_clip;
VECTOR3 m_parallel_light;
float m_parallel_light_intensity;
float m_ambient_light_intensity;
poly_manager *m_poly;
int m_list_depth;
int m_tick;
int m_debug_layer_disable;
UINT64 m_vid_reg0;
int m_matrix_stack_ptr;
MATRIX *m_matrix_stack;
MATRIX m_coordinate_system;
float m_viewport_focal_length;
int m_viewport_region_x;
int m_viewport_region_y;
int m_viewport_region_width;
int m_viewport_region_height;
PLANE m_clip_plane[5];
UINT32 m_matrix_base_address;
cached_texture *m_texcache[2][1024/32][2048/32];
};
/*----------- defined in drivers/model3.c -----------*/
void model3_set_irq_line(running_machine &machine, UINT8 bit, int state);
/*----------- defined in machine/model3.c -----------*/
void model3_machine_init(running_machine &machine, int step);
int model3_tap_read(running_machine &machine);
void model3_tap_write(running_machine &machine, int tck, int tms, int tdi, int trst);
void model3_tap_reset(running_machine &machine);
READ32_HANDLER(rtc72421_r);
WRITE32_HANDLER(rtc72421_w);
/*----------- defined in video/model3.c -----------*/
READ64_HANDLER(model3_char_r);
WRITE64_HANDLER(model3_char_w);
READ64_HANDLER(model3_tile_r);
WRITE64_HANDLER(model3_tile_w);
READ64_HANDLER(model3_vid_reg_r);
WRITE64_HANDLER(model3_vid_reg_w);
READ64_HANDLER(model3_palette_r);
WRITE64_HANDLER(model3_palette_w);
VIDEO_START(model3);
SCREEN_UPDATE(model3);
WRITE64_HANDLER(real3d_cmd_w);
WRITE64_HANDLER(real3d_display_list_w);
WRITE64_HANDLER(real3d_polygon_ram_w);
void real3d_display_list_end(running_machine &machine);
void real3d_display_list1_dma(address_space *space, UINT32 src, UINT32 dst, int length, int byteswap);
void real3d_display_list2_dma(address_space *space, UINT32 src, UINT32 dst, int length, int byteswap);
void real3d_vrom_texture_dma(address_space *space, UINT32 src, UINT32 dst, int length, int byteswap);
void real3d_texture_fifo_dma(address_space *space, UINT32 src, int length, int byteswap);
void real3d_polygon_ram_dma(address_space *space, UINT32 src, UINT32 dst, int length, int byteswap);