summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/includes/micro3d.h
blob: bb7def1734968e9f7f2acc7820a709b92fa08eca (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/*************************************************************************

     Microprose Games 3D hardware

*************************************************************************/

#include "devlegcy.h"
#include "cpu/tms34010/tms34010.h"


#define HOST_MONITOR_DISPLAY		0
#define VGB_MONITOR_DISPLAY			0
#define DRMATH_MONITOR_DISPLAY		0

class micro3d_state : public driver_device
{
public:
	micro3d_state(running_machine &machine, const driver_device_config_base &config)
		: driver_device(machine, config) { }

	UINT16				*shared_ram;
	device_t			*duart68681;
	UINT8				m68681_tx0;

	/* Sound */
	UINT8				sound_port_latch[4];
	UINT8				dac_data;

	/* TI UART */
	UINT8				ti_uart[9];
	int					ti_uart_mode_cycle;
	int					ti_uart_sync_cycle;

	/* ADC */
	UINT8				adc_val;

	/* Hardware version-check latch for BOTSS 1.1a */
	UINT8				botssa_latch;

	/* MAC */
	UINT32				*mac_sram;
	UINT32				sram_r_addr;
	UINT32				sram_w_addr;
	UINT32				vtx_addr;
	UINT32				mrab11;
	UINT32				mac_stat;
	UINT32				mac_inst;

	/* 2D video */
	UINT16				*micro3d_sprite_vram;
	UINT16				creg;
	UINT16				xfer3dk;

	/* 3D pipeline */
	UINT32				pipe_data;
	UINT32				pipeline_state;
	INT32				vtx_fifo[512];
	UINT32				fifo_idx;
	UINT32				draw_cmd;
	int					draw_state;
	INT32				x_min;
	INT32				x_max;
	INT32				y_min;
	INT32				y_max;
	INT32				z_min;
	INT32				z_max;
	INT32				x_mid;
	INT32				y_mid;
	int					dpram_bank;
	UINT32				draw_dpram[1024];
	UINT16				*frame_buffers[2];
	UINT16				*tmp_buffer;
	int					drawing_buffer;
	int					display_buffer;
};

typedef struct _micro3d_vtx_
{
	INT32 x, y, z;
} micro3d_vtx;


/*----------- defined in machine/micro3d.c -----------*/

READ16_HANDLER( micro3d_ti_uart_r );
WRITE16_HANDLER( micro3d_ti_uart_w );

READ32_HANDLER( micro3d_scc_r );
WRITE32_HANDLER( micro3d_scc_w );

READ16_HANDLER( micro3d_tms_host_r );
WRITE16_HANDLER( micro3d_tms_host_w );

READ16_HANDLER( micro3d_adc_r );
WRITE16_HANDLER( micro3d_adc_w );

WRITE16_HANDLER( host_drmath_int_w );
WRITE16_HANDLER( micro3d_reset_w );

READ16_HANDLER( micro3d_encoder_l_r );
READ16_HANDLER( micro3d_encoder_h_r );

CUSTOM_INPUT( botssa_hwchk_r );
READ16_HANDLER( botssa_140000_r );
READ16_HANDLER( botssa_180000_r );

READ32_HANDLER( micro3d_shared_r );
WRITE32_HANDLER( micro3d_shared_w );

WRITE32_HANDLER( drmath_int_w );
WRITE32_HANDLER( drmath_intr2_ack );

WRITE32_HANDLER( micro3d_mac1_w );
WRITE32_HANDLER( micro3d_mac2_w );
READ32_HANDLER( micro3d_mac2_r );

void micro3d_duart_irq_handler(device_t *device, UINT8 vector);
UINT8 micro3d_duart_input_r(device_t *device);
void micro3d_duart_output_w(device_t *device, UINT8 data);
void micro3d_duart_tx(device_t *device, int channel, UINT8 data);

MACHINE_RESET( micro3d );
DRIVER_INIT( micro3d );
DRIVER_INIT( botssa );


/*----------- defined in audio/micro3d.c -----------*/

WRITE8_DEVICE_HANDLER( micro3d_upd7759_w );
WRITE8_HANDLER( micro3d_snd_dac_a );
WRITE8_HANDLER( micro3d_snd_dac_b );
READ8_HANDLER( micro3d_sound_io_r );
WRITE8_HANDLER( micro3d_sound_io_w );

void micro3d_noise_sh_w(running_machine *machine, UINT8 data);

DECLARE_LEGACY_SOUND_DEVICE(MICRO3D, micro3d_sound);


/*----------- defined in video/micro3d.c -----------*/

VIDEO_START( micro3d );
VIDEO_RESET( micro3d );

void micro3d_tms_interrupt(device_t *device, int state);
void micro3d_scanline_update(screen_device &screen, bitmap_t *bitmap, int scanline, const tms34010_display_params *params);

WRITE16_HANDLER( micro3d_clut_w );
WRITE16_HANDLER( micro3d_creg_w );
WRITE16_HANDLER( micro3d_xfer3dk_w );
READ32_HANDLER( micro3d_pipe_r );
WRITE32_HANDLER( micro3d_fifo_w );
WRITE32_HANDLER( micro3d_alt_fifo_w );

INTERRUPT_GEN( micro3d_vblank );