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
|
/***************************************************************************
TMS34010: Portable Texas Instruments TMS34010 emulator
Copyright Alex Pasadyn/Zsolt Vasvari
Parts based on code by Aaron Giles
***************************************************************************/
#pragma once
#ifndef __TMS34010_H__
#define __TMS34010_H__
#include "cpuintrf.h"
#include "driver.h"
/* register indexes for get_reg and set_reg */
enum
{
TMS34010_PC = 1,
TMS34010_SP,
TMS34010_ST,
TMS34010_A0,
TMS34010_A1,
TMS34010_A2,
TMS34010_A3,
TMS34010_A4,
TMS34010_A5,
TMS34010_A6,
TMS34010_A7,
TMS34010_A8,
TMS34010_A9,
TMS34010_A10,
TMS34010_A11,
TMS34010_A12,
TMS34010_A13,
TMS34010_A14,
TMS34010_B0,
TMS34010_B1,
TMS34010_B2,
TMS34010_B3,
TMS34010_B4,
TMS34010_B5,
TMS34010_B6,
TMS34010_B7,
TMS34010_B8,
TMS34010_B9,
TMS34010_B10,
TMS34010_B11,
TMS34010_B12,
TMS34010_B13,
TMS34010_B14
};
/* Configuration structure */
typedef struct _tms34010_display_params tms34010_display_params;
struct _tms34010_display_params
{
UINT16 vcount; /* most recent VCOUNT */
UINT16 veblnk, vsblnk; /* start/end of VBLANK */
UINT16 heblnk, hsblnk; /* start/end of HBLANK */
UINT16 rowaddr, coladdr; /* row/column addresses */
UINT8 yoffset; /* y offset from addresses */
UINT8 enabled; /* video enabled */
};
typedef struct _tms34010_config tms34010_config;
struct _tms34010_config
{
UINT8 halt_on_reset; /* /HCS pin, which determines HALT state after reset */
const char *screen_tag; /* the screen operated on */
UINT32 pixclock; /* the pixel clock (0 means don't adjust screen size) */
int pixperclock; /* pixels per clock */
void (*scanline_callback)(const device_config *screen, bitmap_t *bitmap, int scanline, const tms34010_display_params *params);
void (*output_int)(int state); /* output interrupt callback */
void (*to_shiftreg)(offs_t, UINT16 *); /* shift register write */
void (*from_shiftreg)(offs_t, UINT16 *); /* shift register read */
};
/* PUBLIC FUNCTIONS - 34010 */
VIDEO_UPDATE( tms340x0 );
void tms34010_get_display_params(const device_config *cpu, tms34010_display_params *params);
CPU_GET_INFO( tms34010 );
/* PUBLIC FUNCTIONS - 34020 */
CPU_GET_INFO( tms34020 );
/* Host control interface */
#define TMS34010_HOST_ADDRESS_L 0
#define TMS34010_HOST_ADDRESS_H 1
#define TMS34010_HOST_DATA 2
#define TMS34010_HOST_CONTROL 3
void tms34010_host_w(const device_config *cpu, int reg, int data);
int tms34010_host_r(const device_config *cpu, int reg);
/* Reads & writes to the 34010 I/O registers; place at 0xc0000000 */
WRITE16_HANDLER( tms34010_io_register_w );
READ16_HANDLER( tms34010_io_register_r );
/* Reads & writes to the 34020 I/O registers; place at 0xc0000000 */
WRITE16_HANDLER( tms34020_io_register_w );
READ16_HANDLER( tms34020_io_register_r );
/* Use this macro in the memory definitions to specify bit-based addresses */
#define TOBYTE(bitaddr) ((offs_t)(bitaddr) >> 3)
#define TOWORD(bitaddr) ((offs_t)(bitaddr) >> 4)
CPU_DISASSEMBLE( tms34010 );
CPU_DISASSEMBLE( tms34020 );
#endif /* __TMS34010_H__ */
|